После ответа на вопрос о объектах без силы в Java (парень очищал 1.5GB HashMap) с System.gc()
, мне сказали, что плохая практика вызывает System.gc()
вручную, но комментарии не были полностью убедительными. Кроме того, никто, казалось, не осмелился вырвать и не опросить мой ответ.
Мне сказали, что это плохая практика, но потом мне также сказали, что сборщики мусора больше не систематически останавливают мир и что он также может эффективно использоваться JVM только как подсказка, м в убытке.
Я понимаю, что JVM обычно лучше вас знает, когда ему нужно вернуть память. Я также понимаю, что беспокоиться о нескольких килобайтах данных глупо. Я также понимаю, что даже мегабайты данных не то, что было несколько лет назад. Но все же, 1,5 гигабайта? И вы знаете, что в памяти около 1,5 ГБ данных; ему не нравится выстрел в темноте. Является System.gc()
систематически плохо, или есть какой-то момент, когда он становится в порядке?
Итак, вопрос на самом деле двойной:
- Почему или нет плохой практики вызывать
System.gc()
? Это действительно просто намек на JVM при определенных реализациях, или это всегда полный цикл сбора? Существуют ли действительно сборщики мусора, которые могут выполнять свою работу, не останавливая мир? Прошу прояснить различные утверждения, высказанные людьми в комментариях к моему . - Где порог? Разве не рекомендуется звонить
System.gc()
, или есть время, когда оно приемлемо? Если да, то каковы те времена?