Как работает выделение памяти в Java?
Я только начинаю учить джаву, и мне непонятны некоторые моменты. Я прочитал что большинство переменных хранится в куче и в связи с этим возникли такие вопросы:
Что хранится в стеке? Могу ли я использовать память в стеке для своих переменных и объектов класса? Получается если я создаю обычную целочисленную переменную, то она хранится в куче и я обращаюсь к ней по ссылке?
Заранее спасибо.
Ответы (1 шт):
Смотрим в спеку: https://docs.oracle.com/javase/specs/jvms/se15/html/jvms-2.html#jvms-2.5
- В кучу складываются экземпляры классов и массивы.
- Локальные переменные хранятся в стеке.
В джаве нет понятия "обычная" переменная. Если Вы имеете в виду поле класса то да, само значение будет храниться в куче, а обращаться к нему Вы будете через ссылку на объект. Если же имеется в виду локальная переменная примитивного типа, то она полностью будет храниться в стеке. Сложить в стек объекты нельзя, т.к. только ссылки будут складываться в стек, а сами объекты будут храниться в куче.