2012-05-13 3 views
2

Можно создать дубликат:
What is the garbage collector in Java?Как работает сборщик мусора Java?

В моей программе, у меня есть функция настроить, что вызывает другую функцию по истечении определенного промежутка времени (мы установим его в 20 минут цели этого примера) с использованием ScheduledThreadPoolExecutor.

Функция, которая вызывается, мы скажем removeStat(Character char). В методе он ссылается на функции в боковом характере (мы скажем char.getClient().getWriter()). Мы предположим, что в течение 20-минутного периода ожидания этот символ выходит из строя, и их экземпляр персонажа больше не требуется.

Может ли сборщик мусора Java удалить класс Character за это время, вызвав для char в removeStat значение null или он знает, дождаться, пока вызов будет выполнен?

+0

lol не уверен, если это сарказм или нет, но вы можете в любом случае;) – jmort253

+1

@ jmort253 - Этот PuppyKevin вернулся и принял ответы, вероятно, означает, что он был искренним. :) –

+0

um, ребята. Это не обман. По крайней мере, не связанный с этим вопрос. У этого есть конкретный вопрос о сборке мусора и вызывающих и планировщике. ... Связанный вопрос - это общий вопрос о GC. – vidstige

ответ

5

Сборщики мусора (включая Java) достаточно умен, чтобы не беспокоиться об этом. Сборщик мусора не будет мусором собирать что-либо, пока все ссылки на него не исчезнут. Если объект все еще доступен, он все еще существует.

+0

Итак, скажем, что вместо 20-минутного таймера я использую безумное количество времени (мы сделаем это 7 дней). Мне все равно не нужно беспокоиться о том, что объект будет нулевым? – PuppyKevin

+0

Это правильно. Если вы все еще можете это понять, он все еще там. Он не обращает внимания на то, как часто вы обращаетесь к объекту. Он обращает внимание на возможность доступа к нему. Все остальное рискует нарушить чей-то код (например, ваш). –

+0

Но вам, возможно, придется беспокоиться об исчерпании памяти из всех неиспользуемых, но все же ссылочных символов. –

Смежные вопросы