В этом уроке мы узнаем о нескольких существующих коллекционерах мусора. В Java сбор мусора - это автоматический процесс, который может заменить программистов на сложные задачи, такие как распределение памяти и переработка. Эта статья является третьей статьей в учебной серии по сбору мусора. В предыдущей части 2 мы увидели, как работает коллекция мусора в Java. Это интересная статья. Я рекомендую вам взглянуть. Первая часть представляет коллекцию мусора Java, в основном включая архитектуру JVM, модель памяти кучи и некоторые термины Java.
У Java есть четыре типа коллекционеров мусора:
Серийный сборщик мусора
Параллельный сборщик мусора
Одновременное сканирование мусора Collector (CMS Collector)
G1 Сборщик мусора
Каждый тип имеет свои сильные и слабые стороны. Важно отметить, что когда мы программируем, мы можем выбрать тип коллектора мусора через JVM. Мы выбираем путем передачи параметров в JVM. Каждый тип очень отличается и может предоставить нам совершенно различную производительность приложения. Очень важно понимать каждый тип коллекционера мусора и сделать правильный выбор на основе выбора приложения.
1. Серийный сборщик мусора
Серийный сборщик мусора работает, удерживая все резьбы приложения. Он предназначен для одного потока среды и использует только один поток для сбора мусора и работает, замораживая все потоки приложений, поэтому он может не подходить для средств серверов. Это лучше всего подходит для простых программ командной строки.
Серийный сборщик мусора может использоваться через параметр JVM -xx:+userialgc.
2. Параллельный сборщик мусора
Параллельный сборщик мусора также называется пропускным проходом. Это сборщик мусора по умолчанию для JVM. В отличие от серийных коллекционеров мусора, он использует многопоточную сбору для мусора. Точно так же он также замораживает все потоки приложений при выполнении сбора мусора
3. одновременное составление сбора мусора.
Однажды сборы мусора используют многопоточное сканирование памяти кучи, маркирующие экземпляры, которые необходимо очистить и очищать отмеченные экземпляры. Коллекционер мусора одновременного тега будет держать все потоки приложения только в следующих двух случаях.
Когда помеченный эталонный объект находится в штатной области;
Во время сбора мусора данные в памяти кучи изменяются одновременно.
Сканирующая мусора для одновременного процессора использует больше процессора, чтобы обеспечить пропускную способность программы, чем параллельные коллекционеры мусора. Если мы сможем выделить больше процессора для лучшей производительности программы, то одновременная разметка на коллекторе Scan Marbage является лучшим вариантом, чем одновременный сборщик мусора.
Откройте одновременный сборщик мусора для одновременного марки с помощью параметра JVM xx: + useParnewgc.
4. G1 Коллектор мусора
Коллекционер мусора G1 подходит для ситуаций, когда память кучи большая. Он делит память кучи на разные области, и мусор собирает ее одновременно. G1 также может сжимать оставшееся пространство памяти кучи после восстановления памяти. Одновременное сканирование отмечает коллектор мусора сжимает память в случае STW. G1 Grabage Collection даст приоритет в этом районе с наибольшим количеством мусора в первом предмете.
Используйте коллектор мусора G1 через параметр jvm xx:+useg1gc
Новые функции Java8
При использовании коллектора мусора G1 используйте параметр JVM -XX:+USESTRINGDEPLICATION. Мы можем оптимизировать память кучи, удалив дублирующиеся строки и сохранив только один Char []. Этот вариант был введен в Java8u20.
Мы дали все четыре коллекционера мусора Java, которые необходимо использовать на основе сценариев приложений, оборудования и требований к пропускной способности.
Конфигурация JVM для сбора мусора
Следующие конфигурации ключей JVM связаны с коллекцией мусора Java.
Тип бега коллекционера мусора
| Конфигурация | описывать |
|---|---|
| -Xx:+userialgc | Серийный сборщик мусора |
| -Xx:+useparallgc | Параллельный сборщик мусора |
| -Xx:+useconcmarksweepgc | Одновременное сканирование мусора сборщика мусора |
| -Xx: parallelcmsthreads = | Согласно одновременно -сканированному сборщику мусора = количество используемых потоков |
| -Xx:+useg1gc | G1 Сборщик мусора |
Оптимизированная конфигурация GC
| Конфигурация | описывать |
|---|---|
| -Xms | Инициализировать размер памяти кучи |
| -Xmx | Максимальное значение памяти кучи |
| -Xmn | Размер хроники |
| -Xx: permsize | Инициализировать размер постоянного поколения |
| -Xx: maxpermsize | Максимальная мощность постоянной генерации |
Пример использования параметров JVM GC
java -xmx12m -xms3m -xmn1m -xx: permsize = 20m -xx: maxpermsize = 20m -xx:+userialgc -jar java -application.jar
Суммировать
Вышеупомянутое дело о кратком понимании видов коллекционеров мусора Java в этой статье, и я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!