Коротко о Mark-Sweep Чтобы чистить ненужные объекты GC делает так:
1. Обходит граф всех объектов в хипе (heap) и помечает их
2. Не помеченные объекты никто не использует - их можно удалить. Пример кода Рассмотрим такой код: Так будет выглядеть дерево зависимостей для каждого телефона Nokia. Коротко о поколениях Чтобы каждый раз не обходить полностью весь граф объектов, GC разделяет объекты на поколения: Объекты из Old generation хранятся в Old регионе GC. Объекты из Young generation хранятся в регионах Eden или Survivor. Что будет происходить с мусором в примере? Все новые объекты буду создаваться в регионе Eden. Спустя 1 000 000 итераций картина будет выглядеть так: JVM замечает, что занята значительная доля памяти, и начинает Young GC (GC в молодом поколении) Young GC 1. Нашли GC roots (безусловно достижимые объекты). В нашем случае только те, что лежат на стеке. То есть, 1 Nokia, 1 Siemens и 1 iPhone. 2. Итеративно помечаем их и всех, от кого они зависят 3. Помеченных перекладываем