Разделение области памяти JVM

Java задняя часть JVM WeChat

Изучение Java неизбежно требует изучения виртуальной машины Java, то есть JVM. Спецификация виртуальной машины Java определяет область данных времени выполнения, которая будет использоваться во время выполнения программы. Это также модель разделения области памяти JVM, поэтому ее следует понятно.

Некоторые из них создаются и уничтожаются при запуске и выходе виртуальной машины.Эти области являются общими для потоков, а некоторые привязаны к каждому потоку.Они создаются и уничтожаются при запуске и завершении потоков.Мы.Эти области можно говорят, что это частный поток.

В соответствии со «Спецификацией виртуальной машины Java Java SE 7 Edition» и «Спецификацией виртуальной машины Java Java SE 8 Edition» мы можем разделить следующие области данных времени выполнения, как показано на следующем рисунке:

куча Java

В виртуальной машине Java куча представляет собой область памяти времени выполнения, которая может совместно использоваться различными потоками, а также является областью, в которой все экземпляры классов и объекты массива выделяют память. Эта область создается при запуске виртуальной машины, и ее единственной задачей являетсяхранить экземпляр объекта, эта область также является основным направлением GC.

Ниже приводится разделение кучи JVM на моем ноутбуке.Видно, что она разделена на новое поколение, старое поколение и постоянное поколение.Новое поколение можно разделить на Eden Space, From Survivor Space и To Survivor Космос.

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 17301504 (16.5MB)
   used     = 2483088 (2.3680572509765625MB)
   free     = 14818416 (14.131942749023438MB)
   14.351862127130682% used
From Space:
   capacity = 2621440 (2.5MB)
   used     = 2615312 (2.4941558837890625MB)
   free     = 6128 (0.0058441162109375MB)
   99.7662353515625% used
To Space:
   capacity = 6291456 (6.0MB)
   used     = 0 (0.0MB)
   free     = 6291456 (6.0MB)
   0.0% used
PS Old Generation
   capacity = 44564480 (42.5MB)
   used     = 13316368 (12.699478149414062MB)
   free     = 31248112 (29.800521850585938MB)
   29.88112505744485% used
PS Perm Generation
   capacity = 22020096 (21.0MB)
   used     = 14907008 (14.2164306640625MB)
   free     = 7113088 (6.7835693359375MB)
   67.6972888764881% used

В соответствии с положениями спецификации виртуальной машины куча Java может иметь фиксированный размер или динамически расширяться в соответствии с требованиями, и не требуется гарантировать ее непрерывность.

Содержимое хранилища:Все экземпляры объектов и массивы.

область метода

Область методов — это область, совместно используемая потоками, которая используется для хранения информации о классе, констант и статических переменных, загруженных виртуальной машиной. Область метода является логической частью кучи, и Hotspot реализует область метода с постоянной генерацией. Область методов также включает в себя пул констант времени выполнения (перемещенный в кучу после JDK1.7), который используется для хранения различных литералов и символических ссылок, сгенерированных во время компиляции, но константы не требуется генерировать во время компиляции, и они также могут быть сгенерированы во время выполнения.Помещение новых констант в пул, таких как метод intern() String, использует эту функцию.

Содержимое хранилища:Информация о структуре класса, такая как поля класса, методы, интерфейсы, конструкторы и пулы констант времени выполнения.

регистр счетчика программ

Эта область принадлежит каждому потоку независимо, то есть является частной для потока, и мы можем думать о ней как об индикаторе номера строки байт-кода, выполняемого текущим потоком.

Эта область — единственная область в спецификации виртуальной машины, в которой не указаны какие-либо условия OutOfMemoryError.

Содержимое хранилища:Если поток выполняет метод Java, в регистр записывается адрес выполняемой инструкции байт-кода виртуальной машины.Если поток выполняет собственный метод, в регистр записывается значение undefined.

стек виртуальных машин

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

В таблице локальных переменных хранятся различные примитивные типы данных, известные во время компиляции, ссылки на объекты и адреса, указывающие на инструкцию байт-кода.

Содержимое хранилища:Таблица локальных переменных, стек операндов, выход из метода и другая информация.

собственный стек методов

Подобно стеку виртуальной машины, он хранит информацию о нативных методах.

Содержимое хранилища:Таблица локальных переменных, стек операндов, выход из метода и другая информация.

Отсканируйте QR-код ниже в WeChat, подпишитесь на официальный аккаунт и проверьте, чтобы получить больше статей.

二维码