Почему мы вызываем метод System.gc () для сборки мусора неиспользуемого объекта - PullRequest
0 голосов
/ 20 октября 2011

Почему мы вызываем метод System.gc () для сборки мусора неиспользуемого объекта, если сборка мусора автоматически выполняется в Java потоком демона в фоновом процессе с регулярным интервалом?

Ответы [ 4 ]

3 голосов
/ 20 октября 2011

Для целей тестирования может быть полезно знать, когда GC был выполнен. Однако это редко, и вызов System.gc (), когда он не нужен, является настолько распространенной ошибкой, что вы можете отключить его с помощью -XX:+DisableExplicitGC.

0 голосов
/ 20 октября 2011

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

0 голосов
/ 20 октября 2011

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

Он не заставляет сборщика мусора что-либо делать - он просто дает подсказку.

Используйте это только тогда, когда вам нужно оптимизировать приложение (после профилирования).

Не думаю, что я когда-либо видел это в рабочем коде.

0 голосов
/ 20 октября 2011

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

Кроме того, это не обязательно делается на регулярной основе, но основано на необходимости. Различные реализации будут запускать GC на основе разных критериев.

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