Допустим, в программе Java есть четыре следующих объекта:
Зависимости следующие:
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?