Разница между памятью Stack and Heap в Java
Модель Java Heap и Stack Memory определяет, как и когда разные потоки могут видеть значения, записанные в общие переменные другими потоками, и как синхронизировать доступ к общим переменным, когда это необходимо. Stack используется для распределения статической памяти и Heap для динамического распределения памяти, которые хранятся в ОЗУ компьютера. Основное различие между стеком и кучей - это жизненный цикл значений. Значения стека существуют только в пределах области функции, в которой они созданы. Когда она возвращается, они отбрасываются. Однако значения кучи существуют в куче. Они создаются в какой-то момент времени и разрушаются у другого либо с помощью Garbage Collector, либо вручную.
Память Java Stack
Хранилище стека - это особый регион памяти вашего компьютера, в котором хранятся временные переменные, созданные каждой функцией. Он содержит специфичные для метода значения, которые недолговечны и ссылаются на другие объекты в куче, которые получают от метода. Каждый раз, когда функция объявляет новую переменную, она «толкается» в стек. Когда вызывается функция, блок зарезервирован в верхней части стека для локальных переменных и некоторых учетных данных. Затем каждый раз, когда функция выходит из строя, блок становится неиспользуемым и может использоваться при следующем вызове функции. Стек всегда зарезервирован в последнем в первом порядке (LIFO); самый последний зарезервированный блок всегда является следующим блоком, который должен быть освобожден. Это упрощает отслеживание стека; освобождение блока из стека является не более чем корректировкой одного указателя.
Сводка
- Стек растет и сокращается, поскольку функции push и pop локальные переменные
- Нет необходимости управлять сама память, переменные распределяются и освобождаются автоматически
- У стека есть ограничения по размеру
- Переменные стека существуют только в том случае, когда функция, которая их создала, работает
Память кучи Java
Java Heap space используется средой Java для выделения памяти для классов Object и JRE. Это область данных времени выполнения, из которой виртуальная машина Java выделяет память для всех экземпляров классов и массивов. Всякий раз, когда вы создаете какой-либо объект, он всегда создается в пространстве кучи. В отличие от стека, нет никакого принудительного шаблона для выделения и освобождения блоков из кучи; вы можете выделить блок в любое время и освободить его в любое время. Любой объект, созданный в кучном пространстве, имеет глобальный доступ и может ссылаться из любой точки программы. Java Garbage Collector - это автоматическая система управления памятью, которая восстанавливает кучную память для объектов.
Java Heap space используется средой Java для выделения памяти для классов Object и JRE. Это область данных времени выполнения, из которой виртуальная машина Java выделяет память для всех экземпляров классов и массивов. Всякий раз, когда вы создаете какой-либо объект, он всегда создается в пространстве кучи. В отличие от стека, нет никакого принудительного шаблона для выделения и освобождения блоков из кучи; вы можете выделить блок в любое время и освободить его в любое время. Любой объект, созданный в кучном пространстве, имеет глобальный доступ и может ссылаться из любой точки программы. Java Garbage Collector - это автоматическая система управления памятью, которая восстанавливает кучную память для объектов....
Сводка
- Доступ к переменным глобально
- Ограничение по размеру памяти
- Относительно медленный доступ
- Нет гарантированного эффективного использования пространства, память может со временем фрагментироваться, когда выделяются блоки памяти, а затем освобождается