Respuesta corta
Duplicar java tamaño de la pila, se duplica el tiempo de espera para las pausas de recolección de basura, que con las tecnologías actuales de JVM sido de varios segundos cuando la pila está en el orden Gb. Parece que el recién lanzado Java 7 is going to change that.
Respuesta larga
El MaxPermSize es el tamaño máximo para el montón de generación permanente, un montón que contiene el código de bytes de las clases y se mantiene separado del montón de objetos que contiene los casos reales. Una cosa a tener en cuenta en el caso de las aplicaciones web, es que en cada reintroducción en caliente este uso de la memoria aumentará con múltiples copias de las mismas clases. A menos que se especifique -XX: + CMSClassUnloadingEnabled.
Tamaño máximo del montón (-Xmx) y MaxPermSize tienen que establecerse teniendo en cuenta la cantidad de memoria que se necesita por las clases de la aplicación e instancias, la memoria total del servidor y la memoria necesaria por otras aplicaciones.
Otro punto importante es que expandir la memoria desde el Tamaño de montón mínimo (-Xms) es una operación costosa. Especialmente en el caso de las aplicaciones financieras esto podría significar retrasos. Con requisitos similares en tiempo real, podría ser una buena idea establecer -Xms y -Xmx con el mismo valor.
La siguiente charla puede ser de interés http://www.infoq.com/presentations/Java-without-the-GC-Pauses
De la conversación se puede evidenciar que el efecto secundario de aumentar el montón más de un cierto límite de 2 Gb, 10 Gb, 100 Gb, significa más largo el tiempo de pausa para la recolección de elementos que podrían detenga todo por segundos o un minuto en caso de montones muy grandes.
Por esa razón, con la tecnología JVM actual, desea establecer el montón lo suficientemente grande como para ejecutar su aplicación, pero no demasiado grande. Una forma de encontrar el tamaño correcto, puede establecerlo en el mayor valor posible, luego cortar a la mitad y seguir cortando a la mitad hasta que encuentre problemas, cuando lo haga, duplique el último valor encontrado y manténgalo como el tamaño de pila elegido para producción
Este consejo por supuesto se aplica a montones grandes, en el orden Gb, si su aplicación funciona bien con 256Mb de memoria, solo mantendría ese valor sin más investigación.
Y finalmente para referencia aquí son algunas configuraciones de ejemplo:
-Xms512m -Xmx512m -XX:MaxPermSize=256m -XX:+CMSClassUnloadingEnabled
¡Gracias por el ejemplo de referencia! Copiar y pegar no funcionó para mí por alguna razón (máquina virtual), para aquellos que podrían preguntarse por qué no funciona ... – Fico
@Fico ¿Quizás no haya suficiente espacio para copiar y pegar en el montón de su máquina virtual? –