JVM - куча и стек - PullRequest
       22

JVM - куча и стек

5 голосов
/ 13 мая 2010

Когда класс загружается, что хранится в куче, а что в стеке?

Также, где находятся потоки?

Ответы [ 3 ]

4 голосов
/ 29 сентября 2011

Это действительно просто:

  • объекты (то есть экземпляры классов) всегда в куче. Они не могут быть где-либо еще
    • поля являются частью объектов, поэтому они также живут в куче.
  • локальные переменные (включая метод / конструктор) параметры всегда в стеке. Их больше нигде не может быть.

Обратите внимание, что локальные переменные могут только содержать ссылки ("указатели") или простые значения. Локальная переменная не может содержать «объект».

Обратите внимание, что это представление - это то, что определено в спецификации JVM. Конкретная JVM может размещать объекты в области без кучи, если она этого хочет. Например: если он знает, что вновь созданный объект никогда не ускользает от текущего вызова, то он может поместить экземпляр объекта в область стека. Однако это очень оптимизация, которая не видна разработчику.

4 голосов
/ 13 мая 2010

Типы ссылок находятся в куче.

Все данные типа примитива и ссылки на значения в куче (параметры / локальные переменные метода) находятся в стеке.

Каждый поток имеет свой собственный стек.

Все потоки в приложении имеют одну и ту же кучу.

0 голосов
/ 29 сентября 2011

Примитивы: стек

Объекты: куча

Потоки: есть отдельный стек, а общая куча.

...