Почему сборщик мусора G1 называется «Сначала мусор»?

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

When performing garbage collections, G1 operates in a manner similar to the CMS collector. G1 performs a concurrent global marking phase to determine the liveness of objects throughout the heap. After the mark phase completes, G1 knows which regions are mostly empty. It collects in these regions first, which usually yields a large amount of free space. This is why this method of garbage collection is called Garbage-First

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

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

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
216
2

Ответы 2

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

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

G1 concentrates its collection and compaction activity on the areas of the heap that are likely to be full of reclaimable objects, that is, garbage. (emphasis added)

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

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

After the mark phase completes, G1 knows which regions are mostly empty.

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

Сбор регионов с наибольшим объемом освобождаемого пространства хорош по двум причинам:

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

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

Другие вопросы по теме