Почему Java так долго ждет, чтобы запустить сборщик мусора tor?

Я создаю веб-приложение на Java, используя Play! Фреймворк . Я размещаю его на playapps.net . Я долго ломал голову над предоставленными графиками потребления памяти. Вот пример:

Heap Memory

График основан на периоде постоянной, но номинальной активности. Я не сделал ничего, чтобы вызвать спад в памяти, поэтому я предполагаю, что это произошло из-за того, что сборщик мусора работал, когда он почти достиг своего допустимого потребления памяти.

Мои вопросы:

  • Справедливо ли предположить, что мое приложение работает У нет утечки памяти, поскольку кажется, что вся память правильно восстанавливается сборщиком мусора, когда он запускается?
  • (из заголовка) Почему java ждет до последней секунды, чтобы запустить сборщик мусора? Я вижу значительное снижение производительности по мере того, как потребление памяти увеличивается до верхней четверти графика.
  • Если мои утверждения выше верны, то как я могу решить эту проблему? Другие сообщения, которые я прочитал на SO, кажутся противоположными вызовам System.gc () , начиная от нейтрального («это всего лишь запрос на запуск GC, поэтому JVM может просто игнорировать вас») до полностью против («Код, основанный на System.gc () , в корне не работает»). Или я здесь не на базе, и мне следует искать дефекты в моем собственном коде, которые вызывают такое поведение и периодическую потерю производительности?

ОБНОВЛЕНИЕ
Я открыл обсуждение на PlayApps.net, указав на этот вопрос и упомянув здесь некоторые моменты; в частности, комментарий @Affe относительно консервативных настроек для полного GC и комментарий @G_H о настройках начального и максимального размера кучи.

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

Я сообщу здесь отзыв, когда я его получу; Большое спасибо всем за ваши ответы, я уже многому от них научился!

Разрешение
Поддержка Playapps, которая все еще хороша, не дала мне много предложений, их единственная мысль заключалась в том, что если я активно использовал кеш, это может поддерживать объекты в живых дольше, чем необходимо, но это не так. Я все еще выучил тонну (у-у-у!), И я дал @Ryan Amos зеленый флажок, поскольку я принял его предложение звонить System.gc () каждые полдня, что на данный момент работает нормально.

49
задан ROMANIA_engineer 19 January 2018 в 14:08
поделиться