Кто-нибудь знает хорошее руководство по настройке GC в Java?
У меня проблемы с JVM, запускающей приложение, чья куча памяти выглядит как гребень. Он постоянно скачет с 1,5 ГБ до 3 ГБ и постепенно ухудшается до более высоких значений. Я использую алгоритм G1 GC, но не знаю, как его настроить.
У меня нет доступа к коду приложения, которое я запускаю, и, разумеется, это довольно большое приложение.
Итак, суть, кто-нибудь знает хорошее руководство по настройке GC в Java?
3 ответа
Вот она Настройка сборки мусора с помощью виртуальной машины Java 5.0 от Sun... упс Oracle;-)
Вот ссылка на Java 6
Настройка JVM - это сочетание искусства и науки, и нет единого ответа для всех. Ситуация, которую вы видите, звучит так, как если бы GC по умолчанию делал "отметку сейчас, развертка позже", что может привести к паузам во время развертки. Один набор опций, которые вы можете попробовать:
JAVA_OPTS="-server -XX:-UseParallelGC -XX:-UseConcMarkSweepGC"
Эта комбинация опций в основном запускает другой поток (лунка 2) в фоновом режиме, который постоянно помечает и очищает GC. Штраф, который вы платите, - это чуть больше использования ЦП, но в наши дни ЦП это едва заметно для большинства людей.
Вот все варианты: http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
Вам действительно нужно прочитать столько статей о "настройке производительности java" через Google, сколько вам нужно найти, вам нужно профилировать свое приложение (подробный GC), чтобы узнать, что оно делает, чтобы получить правильное сочетание параметров с Java. Как и все остальное, просто слепое выбрасывание опций, не зная, что они делают, может привести к снижению производительности, а не к улучшению.
В настоящее время наиболее актуальными ресурсами для GC в виртуальной машине Hotspot являются следующие:
Java Performance - содержит полную главу, посвященную настройке GC
Java One 2012 Advanced JVM Tuning - большая часть доклада посвящена настройке GC.