Почему сборщик мусора G1 называется «Сначала мусор»? - PullRequest
0 голосов
/ 05 февраля 2019

Читая документацию Oracle по сборщику мусора G1 , я заметил следующее -

При выполнении сборки мусора G1 работает аналогично сборщику CMS.G1 выполняет параллельную фазу глобальной разметки для определения жизнеспособности объектов в куче.После завершения фазы пометки G1 знает, какие регионы в основном пусты .Сначала он собирается в этих регионах, что обычно дает большое количество свободного места. Именно поэтому этот метод сбора мусора называется Garbage-First

Как упоминалось в приведенной выше цитате, G1 выбирает области, которые в основном пусты.

Myвопрос в том, что если какой-либо регион в основном пуст, как это привело бы к большому объему свободной памяти?Если оно в основном пустое, оно уже является частью свободной памяти.Не так ли?

Может ли кто-нибудь здесь помочь мне прояснить это?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

В этом предложении:

После завершения фазы пометки G1 знает, какие регионы в основном пусты.

"в основном пусто" означает "содержит наиболее утилизируемый мусор"».Это ясно из контекста.Цель этапа маркировки - определить, какие объекты определенно или вероятно достижимы.Остальные, безусловно, недостижимы и могут быть собраны.

Сбор регионов с наибольшим количеством пригодного для использования пространства полезен по двум причинам:

  1. Вы получите наибольшее количество места в ближайшее время.
  2. С копирующим коллектором меньше работы, если пространство «from» в основном содержит то, что вам не нужно копировать в пространство «to».Таким образом, вы эффективно возвращаете пространство.

В большинстве случаев вторая причина более важна.Редко важно быстро вернуть пространство назад.Вам просто нужно пространство, чтобы быть доступным, когда приложение запрашивает его.(GC-паузы - это другое дело, но они вызваны другими вещами.)

0 голосов
/ 06 февраля 2019

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

На странице, которую вы цитировали:

G1 концентрирует свою деятельность по сбору и уплотнению на областях кучи, которые, вероятно, заполнены восстанавливаемыми объектами, то есть мусор . (выделение добавлено)

... вместо того, чтобы просто обрабатывать каждый блок памяти одинаково хорошо для GC, даже если 99% его содержат живые объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...