Где переменные экземпляра объекта, хранящиеся в JVM?

Является ли переменной экземпляра объекта в Java, хранящейся в стеке или области метода JVM?

Кроме того, есть ли у меня переменная экземпляра для нескольких потоков?

Если он хранится в области методов, как переменная экземпляра отличается от хранилища статических переменных?

Ответ 1

Стек и куча - это память, выделенная ОС для JVM, которая работает в system Stack - это место памяти, в котором хранятся методы и локальные переменные.   (в стеке также хранятся ссылки на переменные: примитивный или объект). Куча - это место памяти, в котором хранятся объекты и его переменная экземпляра.

Итак, чтобы подвести итог:

  • Объекты класса, включая код метода и статические поля: куча.
  • Объекты, включая поля экземпляра: куча.
  • Локальные переменные и вызовы методов: stack

Кроме того, есть ли у меня переменная экземпляра для нескольких потоков?

Каждый поток будет иметь счетчик программ (ПК) и стек java. ПК будет использовать стек java для хранения промежуточных значений, динамического связывания, возвращаемых значений для методов и исключений отправки. Это используется в месте регистров.

Также для получения дополнительной информации о потоке вы действительно должны прочитать этот раздел Где создан объект Thread? Стек или куча?.

Если он хранится в области метода, как переменная экземпляра отличается от хранилище статических переменных?

Как вы можете видеть выше статические поля хранятся в куче. С другой стороны, локальные переменные хранятся в стеке.

//EDIT

Согласно комментариям Bruno Reis и Peter Lawrey, вы также должны прочитать о Анализ побега

Ответ 2

Если быть точным,

  • Переменные экземпляра будут храниться в куче.
  • локальные переменные в стеке (в случае переменной не примитивной [ссылочной переменной] ссылочные переменные живут в стеке

    и объект на куче). Только вызов метода и частичные результаты будет храниться в стеке, а не в самом методе.
  • Статические переменные и методы (включая статические и нестатические) на Область метода.

Ссылка: Head First Java