Примечания к обучению JVM: JVM Управление памятью и концепции сбора мусора JVM. Структура памяти JVM состоит из кучи, стека, локального стека методов, области метода и других деталей. Кроме того, JVM использует различные механизмы сбора мусора для адресов загрузки нового поколения и старого поколения соответственно.
Во -первых, давайте посмотрим на структуру памяти JVM, которая состоит из кучи, стека, локального стека методов, области метода и других деталей. Структурная диаграмма показана ниже.
JVM Learning Notes JVM Управление памятью и сборку мусора JVM
Структура памяти JVM
Структура памяти JVM состоит из кучи, стека, локального стека методов, области метода и других деталей. Структурная диаграмма выглядит следующим образом:
1) куча
Память всех объектов, созданных новыми, выделяется в куче, и их размер можно управлять -xmx и -xms. Куча разделена на Ceponycous и старое поколение, а Ceponycous далее разделен на зоны Eden и Survivor. Наконец, Survivor состоит из Space и Tospace. Структурная диаграмма выглядит следующим образом:
Новое поколение. Новое поколение выделяется новыми объектами. Когда Эдем недостаточно, выжившие объекты будут переданы выжившему. Размер нового поколения может контролироваться -xmn, или -xx: Survivivorratio можно использовать для контроля соотношения Eden и Survivor. Используется для хранения объектов, которые пережили несколько коллекций мусора в новом поколении.
2) стек
Когда каждый поток выполняет каждый метод, он будет применяться для кадры стека в стеке. Каждая кадра стека включает в себя локальную область переменной и стек операндов, который используется для хранения временных переменных, параметров и промежуточных результатов во время этого вызова метода.
3) локальный стек методов
Используется для поддержки выполнения собственных методов, сохраняя статус каждого нативного вызова метода
4) Зона метода
Хранит информацию о загрузке класса, статические переменные и константы окончательного типа, атрибуты и информацию метода. JVM использует постоянную генерацию для хранения областей методов, а минимальные и максимальные значения могут быть указаны с помощью -xx: permsize и -xx: maxpermsize. После представления структуры памяти JVM давайте посмотрим на адрес загрузки механизма сбора мусора JVM.
Механизм сбора мусора JVM
JVM принимает различные механизмы сбора мусора для новых и старых поколений соответственно
Новое поколение GC:
У Ceponycous обычно короткое время выживания, поэтому он перерабатывается на основе алгоритма копирования. Так называемый алгоритм копирования состоит в том, чтобы сканировать выжившие объекты и скопировать их в новое совершенно неиспользованное пространство, соответствующее Ceponys, который должен копировать между Eden и From Space или Tospace. Новое поколение использует указатель холостого хода для управления запуска GC. Указатель сохраняет последний выделенный объект в интервале нового поколения. Когда есть новый объект для распределения памяти, он используется для проверки того, достаточно ли места. Если этого недостаточно, это запустит GC. Когда объекты непрерывно выделяются, объекты постепенно переходят от Эдема к выжившему и, наконец, старому поколению.
Используйте javavisualvm, чтобы ясно просмотреть его и заметить, что после заполнения нового поколения объект будет перенесен в старое поколение, а затем очистит и продолжит загружаться. Когда старое поколение будет заполнено, будет сообщено исключение из перспективы, как показано на рисунке ниже:
С точки зрения механизма исполнения, JVM предоставляет последовательный GC (SerialGC), параллельную утилизацию GC (ParallelsCavenge) и параллельный GC (Parnew)
1) Серийный GC
Весь процесс сканирования и копирования осуществляется одним резьбовым способом. Он подходит для приложений с одним процессором, небольшим пространством в новом поколении и не очень высокими требованиями для времени паузы. Это метод GC по умолчанию на уровне клиента. Это может быть вынуждено указать его через -xx:+userialgc
2) Параллельная переработка GC
Весь процесс сканирования и репликации выполняется многопоточным образом. Он подходит для мульти-CPU и приложений с короткими требованиями времени паузы. Это метод GC, используемый уровнем сервера по умолчанию. Его можно использовать для принуждения спецификации -xx:+useparallgc и использовать -xx: parallelgcthreads = 4 для указания количества потоков.
3) Параллельный GC
Использовать с одновременным GC старого поколения
Старое поколение GC:
В отличие от нового поколения, объекты выживают в течение длительного времени и являются относительно стабильными. Следовательно, алгоритм марки используется для утилизации. Так называемая отметка означает сканирование выживших объектов, а затем переработка некрикопанных объектов. После переработки пустое пространство будет либо объединено, либо помечено для легкого распределения в следующий раз. Короче говоря, необходимо снизить потери эффективности, вызванную фрагментацией памяти. С точки зрения механизма исполнения, JVM предоставляет последовательный GC (SerialMSC), параллельный GC (Parallelmsc) и одновременный GC (CMS). Детали конкретного алгоритма должны быть дополнительно изучены.
Приведенные выше механизмы GC должны использоваться в комбинации, а указанный метод показан в следующей таблице:
Вышеуказанное-все содержание глубокого понимания принципов работы Java GC, которые приносит вам редактор. Я надеюсь, что все будут поддерживать wulin.com больше ~