относительно сбора мусора. Почему нам нужно вызвать System.gc () ;? - PullRequest
6 голосов
/ 03 марта 2010

Сборка мусора вызывается автоматически, когда на объект ссылаются, он больше не доступен ни для одной переменной.Но мне нравится знать, почему мы вызываем явно с помощью System.gc (), когда сборщик мусора вызывается автоматически. Когда мы вызываем System.gc ();

Ответы [ 4 ]

10 голосов
/ 03 марта 2010

Ты не. Как вы говорите, сборка мусора происходит автоматически. System.gc () даже не вызывает сборку мусора; это просто намек на JVM, что «сейчас самое время немного почистить»

В общем, попытка заставить сборщик мусора делать то, что вы хотите с помощью System.gc (), является хаком, применяемым людьми, которые думают, что знают лучше, чем на самом деле, или как (попытка) обходного пути для сломанного кода.

Я писал Java годами, и мне еще не приходилось видеть ситуацию, когда вызов System.gc действительно был правильным решением (во всем, что я написал)

6 голосов
/ 03 марта 2010

Мы не.

Мы просто нет.

Возможно, мой опыт ограничен, но я не раз счел необходимым вызвать System.gc ().

Я процитирую Брайана Гетца об аспекте исполнения (если вы не слышали о нем, посмотрите его - и прочитайте остальную часть этой статьи тоже):

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

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

1 голос
/ 08 июля 2010

Вам нужно это нужно. Это очень полезно, что бы ни говорили эти люди.

Пример использования: Скажем, вы только что завершили длинную фоновую задачу, которая заняла много памяти. Ни один из этих объектов не будет использоваться снова. Так как задание заняло много времени, пользователь не будет заботиться о следующих 5-10 секундах. Это хорошее время для сбора мусора.

Если вы не GC в этот момент, это произойдет позже. Вероятно, во время интерактивного использования программы, когда пользовательский опыт становится прерывистым.

1 голос
/ 03 марта 2010

Тебе это не нужно. Думайте об этом как о диагностическом инструменте, как о возможности записи на консоль отладки.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...