JVM GC и неиспользованные ссылки - PullRequest
0 голосов
/ 12 ноября 2018

Допустим, в программе Java есть четыре следующих объекта:

  • main
  • a
  • b
  • c

Зависимости следующие:

main ==> a ==> b ==> c

Другими словами, main использует a , a использует b , b использует c .

Теперь значение объекта a изменяется со ссылки на b на null .Это означает, что нет активных ссылок на b , что делает его доступным для сборки мусора:

main ==> a =/ => b ==> c

Что может произойти сейчас:

A) С точки зрения непрофессионалов, b может быть мусором в любое время.Мое предположение заключается в том, что c станет понятным для сбора мусора только после того, как b будет убран мусором.

B) Однако я думаю, чтоможет быть случай, когда JVM может каким-то образом отличить ссылки на c от объектов, имеющих право на получение GC и не соответствующих требованиям GC, и, следовательно, пометить c как подходящие одновременно с b .

Определяется ли поведение спецификацией языка Java или какой-либо спецификацией, связанной с JVM?Или это остается на усмотрение реализации JVM?

1 Ответ

0 голосов
/ 12 ноября 2018

Благодаря этой ссылке, я считаю, вариант B верен: https://www.dynatrace.com/resources/ebooks/javabook/how-garbage-collection-works/ Как только b и c больше не достижимы от корней GC, они оба могут быть собраны одновременно.

...