Ответ 1
Короткий ответ
Удвоение размера кучи 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