English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Разница между стека и памятью стека в Java

JVM делит пространство памяти на две части: стек и память стека. Пространство стека主要用于 хранение порядка выполнения методов и локальных переменных

Стек всегда хранит блоки по принципу LIFO, а память стека использует динамическое распределение для распределения и аннулирования блоков памяти 

Мемория, выделенная для стека, будет существовать до тех пор, пока не произойдёт одно из следующих событий:

  • Программа завершена 

  • Без памяти 

Напротив, память, выделенная для стека, всегда существует, пока функция не вернётся. Вот различия.

НомерКлючСтекСтек памяти
1
Основные
Стек памяти используется для хранения проектов с коротким сроком жизни, таких как локальные переменные и ссылки на объекты 
Стек памяти выделяется для хранения объектов и классов JRE
2
Способ заказа 
Стек всегда сохраняется по принципу LIFO (last in, first out)
Стек памяти динамически распределяется, и нет фиксированного шаблона для распределения и аннулирования блоков памяти 
3
Размер
Мы можем использовать параметр JVM -XSS для увеличения размера стека
Мы можем использовать опции JVM -Xms и -Xmx для увеличения или уменьшения размера стека
4
Видимость 
Переменная видна только для её владельца 
Все потоки видны 
  5 
Исключение
JVM выбросит java.lang.StackOverflowError
JVM выбросит java.lang.OutOfMemoryError
Основной учебник
Рекомендуем к просмотру