7 видов сборщиков мусора jvm, на этот раз разобраться во всех

JVM
7 видов сборщиков мусора jvm, на этот раз разобраться во всех

предисловие

Ранее мы объяснилиjvmиз组成结构и垃圾回收算法Дождитесь точки знаний, сегодня мы поговорим о самом главном в jvm堆内存как пользоваться垃圾回收器Сбор мусора и как им пользоваться命令настроить использование этих сборщиков мусора.

Подробная память кучи

Над этой цифрой мы должны были хорошо знать об этом. Это можно понять как房子разделен на несколько房间, роль каждой комнаты разная, некоторые для детей, некоторые для родителей, некоторые для бабушек и дедушек

  • Куча памяти делится на两块, часть年轻代, другой блок老年代.

  • Молодое поколение делится наEdenиsurvivor. Соотношение размера их пространства по умолчанию составляет 8: 2,

  • Зона выживания разделена наs0иs1. Эти два пространства абсолютно одинакового размера, то есть пара близнецов, и находятся в соотношении 1:1.

Процесс сборки мусора в куче памяти

первый шаг

新生成Объект сначала помещается вEdenРайон, когда Район Эден满了вызоветMinor GC.

второй шаг

Объекты, пережившие первую сборку мусора, будут перемещены вsurvivorПлощадь S0 в области, она будет срабатываться, когда область S0 заполненаMinor GC, уцелевшие объекты в области S0 будут перемещены в область S1, а область S0 освободится.

После того, как S1 заполнен, в GC выжившие снова перемещаются в область S0, а область S1 свободна, поэтому GC повторяется неоднократно.Каждый GC возраст объекта меняется.涨一岁, после достижения определенного значения (15) войдет老年代.

третий шаг

случилось однаждыMinor GCПосле (предварительное условие) может произойти годыMajor GC, который зависит от сборщика мусора.

Полное условие триггера GC

  • Вызов System.gc вручную продолжит выполнение полного GC.

  • Недостаточно места / полный старости

  • Область метода закончилась/заполнена

Уведомление

Нам нужно вспомнить одно слово:stop-the-world. Это произойдет в любом алгоритме GC. stop-the-world означает, что JVM остановилась, потому что ей нужно выполнить GC停止выполнение заявки.

Когда происходит остановка мира, все потоки, кроме тех, которые необходимы для GC线程оба входят等待до завершения задачи GC. Оптимизация GC часто предназначена для уменьшения возникновения стоп-мира.

Какие области объектов перерабатывать

Следует отметить, что JVM GC перерабатывает только堆内存и方法区内Объект. и栈内存Данные будут автоматически выпущены JVM после того, как они выйдут за пределы области действия, поэтому они не входят в область управления JVM GC.

Конфигурация общих параметров памяти кучи

параметр описывать
-Xms Начальный размер кучи памяти, m, g
-Xmx Максимально допустимый размер динамической памяти, как правило, не более 80% физической памяти.
-XX:PermSize Начальный размер не кучи памяти, общие настройки приложения инициализированы на 200м, а максимум 1024м достаточно.
-XX:MaxPermSize Максимально допустимый размер памяти без кучи
-XX:НовыйРазмер (-Xns) Начальный размер памяти молодого поколения
-XX:МаксНовыйРазмер (-Xmn) Максимально допустимый размер памяти молодого поколения
-XX:SurvivorRatio=8 Соотношение вместимости между районом Эдема и районом Выживших в молодом поколении, по умолчанию 8, то есть 8:1
-Xss размер стековой памяти
-XX:NewRatio=Старое поколение/Новое поколение Установите соотношение размеров старого поколения и молодого поколения
-XX:+PrintGC После запуска jvm, пока он сталкивается с GC, он будет печатать журнал
-XX:+PrintGCDetails Просмотр сведений о GC, включая условия для каждой зоны
-XX:MaxDirectMemorySize Прямой доступ в NIOпрямая память, это чтобы задать его размер, если не задано, то по умолчанию стоит значение максимального пространства кучи -Xmx
-XX:+DisableExplicitGC закрыть System.gc()
-XX:MaxTenuringThreshold Возраст, в котором мусор может войти в старость
-Xnoclassgc Отключить сбор мусора
-XX:TLABWasteTargetPercent Процент TLAB в области eden, по умолчанию 1%
-XX:+CollectGen0First Fullg, будь то первый YGC, по умолчанию false

Tlab Memory.

Полное название TLAB — Thread Local Allocation Buffer.线程本地分配缓存, с точки зрения имени, является областью выделения памяти для конкретного потока, которая создана для ускорения выделения объектов.

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

Пространство TLAB, как правило, не слишком велико.Если большой объект не может быть выделен в TLAB, он будет непосредственно размещен в куче.

параметр описывать
-Xx:+UseTLAB Использование TLAB
-XX:+TLABSize Установить размер TLAB
-XX:TLABRefillWasteFraction Установите для сохранения размера одного объекта, входящего в пространство TLAB, он является пропорциональным значением, по умолчанию 64, то есть, если объект больше 1/64 всего пространства, он будет создан в куче
-XX:+PrintTLAB Просмотр информации TLAB
-Xx:ResizeTLAB Самонастраивающийся порог TLABRefillWasteFraction.

Обзор сборщика мусора

Настраиваемые коллекторы нового поколения: Serial, ParNew, Parallel Scavenge

Коллекторы настроены в старом поколении: CMS, Serial Old, Parallel Old

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

Сборщик мусора молодого поколения

Серийный сборщик мусора

Серийный коллекционер — самый простой и самый старый коллекционер. Обычно известный как:串行回收器,использовать复制算法выполнять сборку мусора

Функции

Последовательный сборщик — это сборщик, который использует один поток для сборки мусора. Последовательный сборщик имеет только один рабочий поток на коллекцию.

Для однопроцессорных компьютеров со слабым параллелизмом концентрация и эксклюзивность последовательных сборщиков, как правило, обеспечивают лучшую производительность.

Имеет проблему Stop The World, и при сборке мусора необходимо остановить работу программы.

использовать-XX:+UseSerialGCПараметр может настроить молодое поколение на использование этого серийного коллектора.

Сборщик мусора ParNew

ParNew на самом деле Serial多线程Версия, за исключением использования многопоточности, остальные параметры точно такие же, как и у Serial. Обычно известный как:并行垃圾回收器,использовать复制算法выполнять сборку мусора

Функции

Количество потоков, включенных ParNew по умолчанию, совпадает с количеством процессоров.На машине с большим количеством ядер процессора вы можете передать параметр-XX:ParallelGCThreadsустановить количество потоков.

В настоящее время это предпочтительный сборщик мусора для молодого поколения, потому что, помимо ParNew, он единственный, который работает с CMS старого поколения.

У него также есть проблема Stop The World.

использовать-XX:+UseParNewGCПараметр может настроить молодое поколение на использование этого параллельного коллектора.

Сборщик ParallelGC

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

Функции

Его очень беспокоит пропускная способность системы,吞吐量=代码运行时间/(代码运行时间+垃圾收集时间)

-XX:MaxGCPauseMillis: Установите максимальное время паузы для сборки мусора. Вы можете контролировать время паузы GC виртуальной машины в пределах диапазона MaxGCPauseMillis. Если вы хотите уменьшить время паузы GC, вы можете установить для MaxGCPauseMillis небольшое значение, но это приведет кGC频繁, тем самым увеличивая GC总时间,降低охватывать吞吐量. Поэтому вам нужно установить это значение в соответствии с реальной ситуацией.

-Xx:GCTimeRatio: Установите размер пропускной способности, это целое число от 0 до 100, по умолчанию его значение равно99, то система потратит не более1/(1+n)время тратится на сборку мусора, т.е.1/(1+99)=1%время.

Кроме того, вы можете указать-XX:+UseAdaptiveSizePolicyВключите адаптивный режим, в котором размер молодого поколения, eden, соотношение «от/к» и возраст объектов, переведенных в старое поколение, автоматически настраиваются для достижения диапазона между размером кучи, пропускной способностью и точкой баланса времени паузы.

Используйте параметр -XX:+UseParallelGC, чтобы настроить новое поколение на использование этого параллельного коллектора.

Сборщик мусора в старости

SerialСтарый сборщик мусора

SerialOld — коллекционный сериал.老年代Версия Recycler, которая также является单线程переработчик.

использовать

  • Один из них предназначен для использования со сборщиком Parallel Scavenge в JDK1.5 и более ранних версиях.

  • Другой — в качестве плана резервного копирования для сборщика CMS.Если CMS имеет сбой в параллельном режиме, SerialOld будет действовать как резервный сборщик.

使用算法: алгоритм разметки-сортировки

Сборщик ParallelOldGC

старостьParallelOldGCСборщик также является многопоточным сборщиком.Как и сборщик ParallelGC нового поколения, это также сборщик, ориентированный на пропускную способность.Он использует标记压缩算法реализовать.

-XX:+UseParallelOldGcДля установки старости использовать коллектор

-XX:+ParallelGCThreadsТакже можно установить количество потоков при сборке мусора.

CMS Recycler

CMS Полное наименование: одновременные метки развертки одновременно означает, что он использует标记清除法. Основная проблема — простои системы.

использовать-XX:+UseConcMarkSweepGCУстановите старость, чтобы использовать этот сборщик.

использовать-XX:ConcGCThreadsУстановите количество одновременных потоков.

Функции

CMS не является эксклюзивным коллектором, также сказал, что процесс восстановления CMS, приложение все еще не остановка работает, и будет продолжать производить новый спам, поэтому в процессе использования CMS должен обеспечить, чтобы достаточную память для Приложение доступно.

CMS не будет ждать, пока приложение饱和Мусор собирается только при определенном пороге, а порог сбора можно настроить с указанными параметрами:-XX:CMSInitiatingoccupancyFractionуказать, по умолчанию68, то есть когда пространство старости使用率достигать68%когда будет执行CMS Recycling.

Если использование памяти быстро увеличивается, при выполнении CMS возникает нехватка памяти, в это время произойдет сбой восстановления CMS, и виртуальная машина запустит старое поколение.串行переработчик;SerialOldGCПроисходит сборка мусора, которая прерывает работу приложения и не работает должным образом, пока сборка мусора не будет завершена.

Время паузы GC в этом процессе может быть больше, поэтому-XX:CMSInitiatingoccupancyFractionНастройка зависит от реальной ситуации.

Как мы уже говорили, когда изучали алгоритм, одним из недостатков метода пометки и прогонки является то, что内存碎片проблема, то в CMS есть настройка параметра-XX:+UseCMSCompactAtFullCollecionМожет сделать переработку CMS завершенной один раз碎片整理.

-XX:CMSFullGCsBeforeCompactionПараметр может установить, сколько раз после перезапуска CMS память выполняется один раз压缩.

Переработчик G1

Пространство слишком длинное, мы объясним в следующей статье! ! !

айтишник

一个在大厂做高级Java开发的程序猿

Обратите внимание на публичный аккаунт WeChat: IT-брат

Ответ: Видеоруководство по практическому проекту Java: вы можете получить 200G, 27 комплектов видеоурока по практическому проекту

Re: Маршрут обучения Java, вы можете получить самую последнюю и самую полную дорожную карту обучения

Re: Java eBook, вы можете получить 13 обязательных к прочтению книг для лучших программистов

Ответ: полный набор учебных пособий по Java, которые вы можете получить: основы Java, веб-приложение Java, все учебные пособия по JavaEE, включая весеннюю загрузку и т. д.

Re: Шаблон резюме, вы можете получить 100 красивых резюме