Если вы хотите определить право объекта на сборку мусора, попробуйте проверить, достижим ли он из корневого набора. Корневой набор - это объекты, на которые ссылаются из стека вызовов и глобальные переменные.
В вашем примере корневой набор изначально состоит из obj1
и args
(давайте проигнорируем любые другие, которые могут существовать - они не имеют значения для вашего примера). Непосредственно перед строкой 6 obj2
явно доступен из корневого набора, поскольку obj1
содержит ссылку на obj2
. Но после строки 7 единственным объектом в корневом наборе является args
. От args
нельзя ссылаться на obj1
или obj2
, поэтому в строке 8 оба значения obj1
и obj2
имеют право на сбор.