Мусор, созданный объектом, на который никогда не ссылаются

Есть ли мусор, созданный объектом, на который никогда не ссылаются?

Пример, о котором я думаю, - это использование статического метода фабрики для создания объекта, затем этот объект выполняет функцию, но никогда не создает ссылку на него.

Например:

LoggerFactory.getLogger(Foo.class).info("logging some stuff");

Создает ли это просто объект без ссылок в пространстве eden, который будет собирать мусор, как только произойдет следующая сборка?

4 ответа

Решение

getLogger возвращает экземпляр - создает ли он новый или возвращает ранее кэшированный, до LoggerFactoryРеализация. Если на этот объект больше не ссылаются изнутри фабрики, он будет иметь право на сборку мусора.

При условии, что getLogger() не сохраняет созданное Logger где-то (что вполне возможно), тогда да. Сборщик мусора очень хорош в утилизации недолговечных объектов, поэтому он должен получить GCd довольно быстро.

Конечно, никто не напишет эту конкретную строку регистрации, так как это не имеет смысла.

Java GC работает, периодически анализируя, какие объекты доступны через цепочку ссылок. Это не зависит от того, были ли эти объекты вообще достижимы.

Ваш вопрос говорит о том, что вы думаете, что GC может отслеживать ссылки, которые необходимо восстановить, чтобы определить, какие объекты собирать. Хотя GC не запрещается делать это, он не может полагаться исключительно на такую ​​стратегию, и мне неизвестно о какой-либо существующей реализации Java GC, использующей ее.

Создает ли это просто объект без ссылок в пространстве eden, который будет собирать мусор, как только произойдет следующая сборка?

Может быть, а может и нет. Logger экземпляр ссылается как this внутри info()

Например, если info() затем создает анонимный внутренний класс или лямбду с захватом этого и помещает его в очередь задач, то Logger Экземпляр может жить дольше, чем строка кода в вашем вопросе.

В большинстве сценариев это, вероятно, все еще очень недолговечно. Но вы не можете знать это наверняка из одной строки кода.

На другом конце спектра объект никогда не может быть размещен в куче, т. Е. Даже в пространстве Eden, из-за Escape-анализа

Другие вопросы по тегам