Разница между памятью Stack and Heap в Java

Модель Java Heap и Stack Memory определяет, как и когда разные потоки могут видеть значения, записанные в общие переменные другими потоками, и как синхронизировать доступ к общим переменным, когда это необходимо. Stack используется для распределения статической памяти и Heap для динамического распределения памяти, которые хранятся в ОЗУ компьютера. Основное различие между стеком и кучей - это жизненный цикл значений. Значения стека существуют только в пределах области функции, в которой они созданы. Когда она возвращается, они отбрасываются. Однако значения кучи существуют в куче. Они создаются в какой-то момент времени и разрушаются у другого либо с помощью Garbage Collector, либо вручную.

Память Java Stack

Хранилище стека - это особый регион памяти вашего компьютера, в котором хранятся временные переменные, созданные каждой функцией. Он содержит специфичные для метода значения, которые недолговечны и ссылаются на другие объекты в куче, которые получают от метода. Каждый раз, когда функция объявляет новую переменную, она «толкается» в стек. Когда вызывается функция, блок зарезервирован в верхней части стека для локальных переменных и некоторых учетных данных. Затем каждый раз, когда функция выходит из строя, блок становится неиспользуемым и может использоваться при следующем вызове функции. Стек всегда зарезервирован в последнем в первом порядке (LIFO); самый последний зарезервированный блок всегда является следующим блоком, который должен быть освобожден. Это упрощает отслеживание стека; освобождение блока из стека является не более чем корректировкой одного указателя.

Сводка

  1. Стек растет и сокращается, поскольку функции push и pop локальные переменные
  2. Нет необходимости управлять сама память, переменные распределяются и освобождаются автоматически
  3. У стека есть ограничения по размеру
  4. Переменные стека существуют только в том случае, когда функция, которая их создала, работает

Память кучи Java

Java Heap space используется средой Java для выделения памяти для классов Object и JRE. Это область данных времени выполнения, из которой виртуальная машина Java выделяет память для всех экземпляров классов и массивов. Всякий раз, когда вы создаете какой-либо объект, он всегда создается в пространстве кучи. В отличие от стека, нет никакого принудительного шаблона для выделения и освобождения блоков из кучи; вы можете выделить блок в любое время и освободить его в любое время. Любой объект, созданный в кучном пространстве, имеет глобальный доступ и может ссылаться из любой точки программы. Java Garbage Collector - это автоматическая система управления памятью, которая восстанавливает кучную память для объектов.

Java Heap space используется средой Java для выделения памяти для классов Object и JRE. Это область данных времени выполнения, из которой виртуальная машина Java выделяет память для всех экземпляров классов и массивов. Всякий раз, когда вы создаете какой-либо объект, он всегда создается в пространстве кучи. В отличие от стека, нет никакого принудительного шаблона для выделения и освобождения блоков из кучи; вы можете выделить блок в любое время и освободить его в любое время. Любой объект, созданный в кучном пространстве, имеет глобальный доступ и может ссылаться из любой точки программы. Java Garbage Collector - это автоматическая система управления памятью, которая восстанавливает кучную память для объектов....

Сводка

  1. Доступ к переменным глобально
  2. Ограничение по размеру памяти
  3. Относительно медленный доступ
  4. Нет гарантированного эффективного использования пространства, память может со временем фрагментироваться, когда выделяются блоки памяти, а затем освобождается

Источник: http://net-informations.com/Java/cJava/memory.htm

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector