Краткий ответ
Удвоение размера кучи Java удваивает время ожидания для пауз Сборки мусора, что в современных технологиях JVM становится равным нескольким секундам, когда куча находится в порядке Gb.Кажется, что недавно выпущенная Java 7 собирается изменить это .
Длинный ответ
MaxPermSize - этомаксимальный размер для кучи постоянного поколения, кучи, которая содержит байт-код классов и хранится отдельно от кучи объектов, содержащей фактические экземпляры.В случае веб-приложений следует иметь в виду, что при каждом повторном развертывании использование памяти будет увеличиваться с использованием нескольких копий одного и того же класса.Если не указано -XX: + CMSClassUnloadingEnabled.
Максимальный размер кучи (-Xmx) и MaxPermSize должны быть установлены с учетом того, сколько памяти требуется классам и экземплярам приложений,Общая память сервера и память, необходимая для других приложений.
Другим важным моментом является то, что расширение памяти с Min Heap Size (-Xms) является дорогостоящей операцией.Особенно в случае финансовых приложений это может означать задержки.При схожих требованиях в реальном времени было бы неплохо установить для -Xms и -Xmx одинаковые значения.
Следующий доклад может представлять интерес http://www.infoq.com/presentations/Java-without-the-GC-Pauses
Из разговораВы можете доказать, что побочный эффект увеличения кучи более чем на определенный предел 2Gb, 10Gb, 100Gb означает более длительное время паузы для сборки мусора, которая может остановить все на несколько секунд или минуту в случае очень больших куч.
По этой причине с текущей технологией JVM вы хотите установить кучу достаточно большой для запуска вашего приложения, но не слишком большой.Чтобы найти правильный размер, можно установить для него максимально возможное значение, затем разрезать пополам и продолжать разрезать пополам до тех пор, пока вы не обнаружите проблемы, при этом удвойте последнее найденное значение и оставьте его в качестве выбранного размера кучи.для производства.
Этот совет, конечно, применим для больших куч, в порядке Gb, если ваше приложение работает нормально с 256 МБ памяти, я бы просто оставил это значение без дальнейшего изучения.
И, наконец, для справкиВот несколько примеров настроек:
-Xms512m -Xmx512m -XX:MaxPermSize=256m -XX:+CMSClassUnloadingEnabled