Что такое обработка ссылок в процессе сборки мусора

Я читаю о G1 GC, и есть процессы, называемые «Обработка эталонов» и «Эталонный Enq» как в этапах цикла сбора Янга, так и в цикле параллельной маркировки. Что это за процессы? Что там произойдет?


person Martin    schedule 02.07.2019    source источник
comment
Судя по названию, я бы предположил: первый касается обработки вновь добавленных ссылок, второй - помещения (постановки в очередь) ссылок в определенные списки.   -  person GhostCat    schedule 02.07.2019
comment
Моя ошибка, я хотел спросить, в чем именно заключается процессинг, и какие действия там происходят.   -  person Martin    schedule 02.07.2019
comment
Если бы у меня было больше, чем это внутреннее чувство, я бы уже написал ответ ;-)   -  person GhostCat    schedule 02.07.2019
comment
Как сказано в этот ответ: «[Сборщики мусора] должны пройти все живые ссылки, т.е. встречается, это мусор на устранение. Таким образом, при обнаружении слабой ссылки во время обхода он не будет проходить по референту, но запоминает ссылочный объект. После завершения обхода он просматривает все встреченные ссылочные объекты и проверяет, был ли референт помечен как достижимый по другому пути. Если нет, эталонный объект очищается и связывается для постановки в очередь».   -  person Holger    schedule 02.07.2019
comment
@Holger спасибо за ваш ответ, так как я понимаю, что GC использует информацию о ссылке для обработки ссылочных объектов иначе, чем обычные, сильные ссылочные объекты. Я прав? Кроме того, мне интересно, какова цель постановки в очередь и когда GC начинает обрабатывать эту очередь?   -  person Martin    schedule 02.07.2019
comment
«Постановка в очередь» означает, что ссылочные объекты становятся доступными через ReferenceQueue, чтобы приложения, активно использующие эту функцию, могли узнать, что объект стал недоступным. Сборщик мусора не обрабатывает очередь.   -  person Holger    schedule 03.07.2019


Ответы (1)


Обработка ссылок — это этап, предназначенный для обработки объектов специальных ссылок (например, слабых ссылок, финализаторов, ссылок JNI).

Специальные ссылки имеют два важных аспекта

  • они могут иметь особую семантику в отношении достижимости объекта (например, слабые ссылки)
  • эталонный объект может потребоваться добавить в эталонную очередь в результате работы GC

Во время обычной фазы GC эталонный объект находится в очереди на постобработку.

Фаза «Ref Proc» начинается после основной фазы GC, поэтому известно, какие объекты сохранились, а какие нет, поэтому можно применить эталонную семантику.

«Ref Enq» выполняется позже, чтобы поместить ссылку в очереди ссылок (очередь ссылок — это объект Java в куче, обычно используемый для реализации шаблонов, разрешенных специальными ссылками).

person Alexey Ragozin    schedule 02.07.2019