2015-02-02 6 views
4

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

Понимаю, что никакая гарантия вообще не должна реагировать на этот звонок JVM.

И я знаю, что System.gc() is довольно хороший индикатор принципиально сломанного кода.

Но, если у меня есть серверный сервер, и мне нужно обработать много ресурсов на этапе загрузки сервера. И после загрузки памяти полно мусора.

И я знаю, что мой сервер будет использоваться только в Ubuntu с HotspotJDK1.8 и это JDK реагирует на System.gc().

Неправильно ли звонить System.gc() только один раз после загрузки и до того, как я открою сервер для пользователей?

Есть ли кто-то, кто делает то же самое?

+0

Можете ли вы поделиться ссылкой на эту статью? – Vitaly

+1

@TheLostMind Ваша ссылка не говорит о GC вообще. Он говорит только о приоритетах потоков. Это утверждение даже не имеет смысла. GC не выполняется ядром Linux. – EJP

ответ

1

Это нормально, чтобы позвонить System.gc(). Используйте инструмент анализа памяти, чтобы проверить, что это помогает в вашем случае.

Спецификация не может гарантировать никаких результатов, поскольку vm, возможно, только что сделал GC.

+0

Спецификация не гарантирует никаких результатов, но в ней не указано, почему. – EJP

4

Не нужно называть его вообще. Не гарантируется, что он что-то сделает, и гарантируется, что GC будет выполнен до того, как будет сброшен OutOfMemoryException. И если он что-то делает, это может потерять время процессора.

+0

негодный CPU? Зачем? – alfasin

+1

@alfasin Выполняя GC в неподходящее время. – EJP

+1

, но в соответствии с описанием OP это звучит так, как будто * * соответствующее время. – alfasin