Что такое сборщик мусора Java
Коллектор мусора Java является одним из трех важных модулей виртуальной машины Java (JVM) (два других-это переводчики и многопоточные механизмы). Он предоставляет приложения с автоматическими функциями распределения памяти (распределение памяти) и автоматическим сбором памяти (сбор мусора). Обе операции происходят на куче Java (кусок памяти быстр). В определенный момент времени, если у объекта есть более чем одна ссылка, указывающая на него, то объект живет. В противном случае он будет считаться мусором и может быть переработано и повторно используется коллекционером мусора. Операции по сбору мусора требуют процессора, потоков, времени и других ресурсов, поэтому легко понять, что операции по сбору мусора не происходят в режиме реального времени (объект выпускается сразу после смерти). Когда память потребляется или достигнут определенный индикатор (порог, используется отношение памяти к общей памяти, например, 0,75), запускается операция сбора мусора. Есть исключение из смерти объекта. Даже если объект типа java.lang.thread не упоминается, если поток все еще работает, он не будет переработан.
Механизм переработки
Согласно статистическому анализу, большинство объектов в Java (включая некоторые другие языки высокого уровня) имеют короткие жизненные циклы, поэтому память Java управляется в поколениях. Цель разделения поколений - это не что иное, как использовать различные стратегии управления (алгоритмы) для блоков памяти разных поколений, чтобы максимизировать производительность. По сравнению со старшим поколением, молодое поколение обычно намного меньше, а частота утилизации высока, а скорость быстрая. Пожилые люди имеют низкую частоту утилизации и занимают много времени. Память распределена в молодом поколении. Объекты в молодом поколении будут автоматически продвигаться до старого поколения после нескольких циклов утилизации.
Выбор дизайна
Выбор дизайна влияет на сложность внедрения индикаторов коллекционера мусора JVM и индикаторов производительности JVM и подходит для различных сценариев. Он описывает характеристики стиля алгоритма утилизации.
Однопоточная серийная переработка по сравнению с многопоточной параллельной переработкой
Вопрос о том, обрабатывается ли сама операция утилизации несколькими потоками. Преимущества переработки однопоточной переработки заключается в том, что она проста, легко реализовать, с небольшим количеством фрагментов и подходит для одноядерных машин. Многоподобная параллельная переработка может полностью использовать ресурсы ЦП на многоядерных машинах, сократить время переработки и повысить производительность. Недостатком является то, что он сложный, а некоторые фрагменты не могут быть переработаны.
Пауза приложений во время переработки против переработки и применения одновременно
Задайте, следует ли сделать паузу приложений во время операции утилизации. Преимущества приостановки приложений заключаются в том, что они простые, точные, очищенные относительно чистые и убираются в течение короткого времени (исключая ресурсы ЦП). Недостатком является то, что приостановка приложений приведет к расширению времени отклика применения во время цикла сбора мусора, а системы с очень высокой производительностью в реальном времени более чувствительны. Преимущества параллельной обработки переработки и применения в том, что время реакции применения является относительно стабильным, а недостатки заключаются в том, что его трудно достичь, высокая частота очистки и возможную фрагментацию.
Uncerge Freed Fragments памяти против слияния фрагментов памяти по сравнению с копией живого в новое место
Эти три варианта описывают, как управлять фрагментами блоков мертвой памяти. Фрагменты мертвой памяти обычно разбросаны повсюду в куче. Если они не управляются, будет две проблемы. Когда распределение памяти медленно из -за поиска доступной памяти, небольшие фрагменты приведут к отходам памяти (например, большие массивы требуют больших непрерывных фрагментов памяти). Есть два способа управления: переместить живую память на один конец блока памяти, записать начальную позицию доступной памяти или просто скопировать живую память в новую область памяти, а исходный блок памяти полностью пуст.
Показатели производительности
①. Производительность (пропускная способность)
Соотношение времени не заново до общего времени в течение более длительного периода (значимым только длительные периоды). Измерение операционной эффективности системы.
②. Сбор мусора над головой
Соотношение времени восстановления к общему времени в течение более длительного периода. Соответствующие производительности, сумма составляет 100%.
③. Пауза
Когда Java Virtual Machines перерабатывают мусор, некоторые алгоритмы будут приостановить выполнение всех потоков применения, а некоторые системы могут быть чувствительны к интервалу времени паузы.
④. Частота сбора
Сколько времени нужно, чтобы восстановиться?
⑤. Размер использования памяти (следов)
Как размер кучи.
⑥. В режиме реального времени (оперативность)
Сколько времени требуется, чтобы объект занимал память от объекта, который будет переработан?
Типы сбора мусора
Все типы переработчиков основаны на технологии поколений. Виртуальная машина Java Hotspot включает в себя три поколения, молодое поколение, старое поколение и постоянное поколение.
①permanune Generation
Магазины классов, методов и их описания информации. Начальный размер и максимальное значение могут быть указаны с помощью двух дополнительных параметров -xx: permsize = 64m и -xx: maxpermsize = 128m. Обычно нам не нужно регулировать этот параметр, достаточно размера постоянного поколения по умолчанию, но если слишком много загруженных классов и недостаточно, просто отрегулируйте максимальное значение.
② Старшее поколение
Основные объекты хранения в молодом поколение, которые все еще выживают и обновляются после нескольких циклов утилизации, все еще живы. Конечно, для некоторых крупных распределений памяти они также могут быть непосредственно распределены на постоянное поколение (экстремальный пример заключается в том, что молодое поколение вообще не может сохранить).
③young поколение
Большинство действий распределения памяти и утилизации происходят у молодых поколений. Как показано на рисунке ниже, молодое поколение разделено на три области: исходная область (Eden) и две небольшие области выживания (выжившие). Две области выживания разделены на и в соответствии с их функциями. Большинство объектов выделяются в исходной области, и в гостиной находится более одна операция по сбору мусора.
Серийный коллекционер
Один поток выполняет операцию по переработке, приостанавливает выполнение всех потоков применения в течение периода переработки. Утилизатор по умолчанию в режиме клиента вынужден быть указан через параметр командной строки -xx:+userialgc.
①minor Collection для молодых поколений
Переместите выжившие объекты в области Эдема в область. Если область не может быть установлена, перейдите непосредственно к старому поколению. Если область не может быть установлена, перейдите непосредственно к старому поколению. Если из области очень старая, перейдите к старому поколению. После того, как переработка завершена, Иден и из областей пусты. В настоящее время функции от и до того, как обмениваются, от того, что они изменяются на и до, и пустые до каждого раунда переработки. Выбор дизайна является репликацией.
② Алгоритм утилизации пожилых людей (полная коллекция)
Утилизация пожилых людей делится на три шага: отметка, развертка и слияние. Стадия маркировки отмечает все выживающие объекты, стадия очистки выпускает все мертвые объекты, и этап слияния объединяет все выживающие объекты в предыдущую часть старого поколения, оставляя все свободные фрагменты позади. Выбор дизайна - это слияние, чтобы уменьшить фрагментацию памяти.
Параллельный коллекционер
Используйте несколько потоков для выполнения коллекции мусора одновременно. Многоядерная среда может полностью использовать ресурсы процессора, сокращать время переработки, повысить производительность JVM и переработки по умолчанию в режиме сервера. Как и серийный переработчик, выполнение всех прикладных потоков приостановлено во время переработки. Вынуждено указать с помощью параметра командной строки -xx:+useparallelgc.
①minor Collection для молодых поколений
Многочисленные нити используются для переработки мусора, а алгоритм каждой нити такой же, как у серийного переработчика.
② Алгоритм утилизации пожилых людей (полная коллекция)
Старшее поколение по-прежнему однопоточное, так же, как серийный утилизатор.
Параллельная коллекция сжигания
Утилизация молодого поколения и старшего поколения обрабатывается многопоточной. Указано с помощью параметра команды -xx:+useparalleloldgc, xx: parallelgcthreads = 3 может дополнительно указать количество потоков, участвующих в параллельной переработке. Как и серийный переработчик, выполнение всех прикладных потоков приостановлено во время переработки. По сравнению с параллельными переработчиками, старшее поколение имеет более короткое время утилизации, что сокращает время паузы. Вынуждено указать с помощью параметра командной строки xx:+useparalleloldgc.
①minor Collection для молодых поколений
То же, что и параллельный коллекционер
② Алгоритм утилизации пожилых людей (полная коллекция)
Пожилые люди делятся на три шага: маркировка, подсчет и слияние. Идея деления используется здесь, и старое поколение разделено на многие регионы фиксированного размера. На стадии маркировки все выжившие объекты делятся на группы N (количество переработанных потоков должно быть таким же, как и количество переработанных потоков). Каждая поток отвечает за свою собственную группу, отмечая местоположение выживших объектов и информацию о скорости выживаемости региона (региона), и отмечая его как параллельную. На статистической стадии выживаемость каждого региона учитывается. В принципе, коэффициент выживаемости в передней части относительно высок. Спереди к спине можно найти начальное положение (области, где выживают большинство объектов, не стоит слияния). Статистическая стадия является последовательной (одиночная потока). На этапе слияния, основанной на информации на статистической стадии, несколько потоков копируют выживающие объекты из одного региона в другой регион параллельно.
Одновременный коллекционер Mark-Sweep
Также известный как коллекционер с низкой задержкой, приложение приостанавливается в течение более короткого времени с помощью различных средств. В основном выполняет операции по переработке одновременно с приложением, без слияния и копирования операций. Указано через командную строку -xx:+useconcmarksweepgc, вы также можете указать использование режима инкрементной рециркуляции -xx:+useconcmarksweepgc в одноядерных или двухъядерных системах. Польшемная переработка относится к делению операции по переработке на несколько фрагментов, выполнение одного фрагмента и выпуска ресурсов ЦП на приложение, а затем продолжает перерабатывать последний результат в определенную момента в будущем. Цель также состоит в том, чтобы сократить задержку.
①minor Collection для молодых поколений
То же, что и параллельный коллекционер
② Алгоритм утилизации пожилых людей (полная коллекция)
Он разделен на четыре шага: начальный знак, одновременная отметка, замечание и одновременная развертка. Обратите особое внимание, нет операции слияния, поэтому будут фрагменты.
Инструмент оценки производительности для коллекционера мусора Java
①xx:+printgcdetails и xx:+printgctimestamps
Информация о времени начала, продолжительности, запасной памяти каждого поколения и т. Д.
②jmap [опции] pid
JAMP 2043 Просмотреть общие объекты, которые были загружены в процессе 2043 года. Обычно файлы DLL.
Jmap -Heap 2043 Проверьте информацию о конфигурации и использование кучи памяти.
Jmap -permstat 2043 Проверьте состояние загрузки постоянного поколения.
Jmap -Histo 2043 Проверьте загрузку и использование памяти класса.
③jstat [опции] pid
JSTAT -Class 2043 Загрузка класса, разгрузка, использование памяти.
JSTAT -GC 2043 Статус выполнения GC.
PostScript
Java обеспечивает автоматические функции выбора и автоматической оптимизации производительности. Прежде чем делать настройку коллекционера мусора, сначала перечислите индикаторы производительности, которые вас обеспокоены, сообщите JVM индикаторы производительности, которые вас обеспокоены через командную строку, и автоматически настроенные JVM. Если вы не удовлетворены, вы можете указать сборщик мусора. Outofmemory обычно связана с недостаточной памятью кучи, поэтому вы можете настроить командные строки -xmx1024m и -xx: maxpermsize = 128M.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.