Ваш вопрос в некотором роде задом наперед. Объекты не помечаются для сбора, а помечаются для хранения.
Сборщик мусора отмечает объекты, которые все еще используются, начиная с активных кадров стека и всех статических переменных и т. Д., Следуя ссылкам, которые он находит. Каждый объект, который находит сборщик мусора, помечается как используемый и не будет собран.
Таким образом, дочерние объекты не помечаются для сбора, вместо этого они просто не помечаются для хранения, потому что их родительский объект также не является.
(Это, безусловно, верно для сборщика мусора с меткой и зачисткой, который используется по умолчанию для большинства виртуальных машин Java. Другие сборщики мусора могут вести себя по-разному.)