Сборщик сначала мусора (G1) представляет собой алгоритм сборки мусора введено в Oracle HotSpot виртуальная машина Java (JVM) 6 и поддерживается с 7, обновление 4. Планировалось заменить Concurrent mark sweep collector (CMS) в JVM 7 и было сделано по умолчанию в Java 9.
Сборщик мусора (G1) - это сборщик мусора в стиле сервер, предназначенный для мультипроцессоров с большой памятью, что с высокой вероятностью соответствует цели в реальном времени при достижении высокой пропускной способности. G1 предпочтительно собирает регионы с наименьшим объемом оперативных данных или «сначала мусор». G1 - это долгосрочная замена CMS. Операции с целой кучей, такие как глобальная маркировка, выполняются одновременно с приложением потоками, чтобы предотвратить прерывания, пропорциональные размеру кучи или оперативным данным. Одновременная маркировка обеспечивает как полноту сбора, так и идентифицирует области, созревшие для рекультивации, путем уплотнения и эвакуации. Эта эвакуация выполняется в параллельном на многопроцессорах, чтобы уменьшить время пауз и увеличить пропускную способность.
G1 впервые был представлен как экспериментальная опция в Java SE 6, обновление 14, где его можно включить с помощью следующих двух параметров командной строки: -XX: + UnlockExperimentalVMOptions
и -XX: + UseG1GC
В JDK 7 планировалось, что G1 заменит CMS в JVM Hotspot. Между CMS и G1 есть два основных различия. Во-первых, G1 представляет собой уплотняющий коллектор. G1 сжимается в достаточной степени, чтобы полностью избежать использования мелкозернистых свободных списков для размещения, что значительно упрощает части сборщика и в основном устраняет потенциальные проблемы фрагментации. Помимо сжатия, G1 предлагает более предсказуемые паузы при сборке мусора, чем сборщик CMS, и позволяет пользователям устанавливать желаемые цели паузы.
Предложения по Java 9 включали превращение G1 в стандартный сборщик мусора, а счетчик Google предлагал хорошо известную CMS в качестве стандарта, утверждая, что измененная CMS, которую он использует, выполняет лучше, чем G1.
В Java 9 G1 был сделан сборщиком мусора по умолчанию.
Гарантированное поведение в реальном времени даже с мусором для сбора требуется сборщик мусора в реальном времени, такой как те, которые поставляются с Sun Java RTS или IBM WebSphere RT.