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