He encontrado la infame OutOfMemoryException en mi aplicación y en lugar de simplemente aumentar la cantidad de Heap Space disponible traté de ver cuál era el problema, por si acaso, había algún tipo de pérdida de mi aplicación.Java Heap Space - ¿Cómo funciona -Xmx exactamente?
He añadido el parámetro JVM -XX: + HeapDumpOnOutOfMemoryError que crea un Heap Dump cuando se encuentra el error OutOfMemory. Luego analicé el archivo de volcado producido con diferentes herramientas de creación de perfiles. Luego comencé a jugar con el parámetro -Xmx y observar patrones.
Lo que me desconcertó es lo siguiente. ¿Por qué al analizar el volcado descubrí que el tamaño total de todos los objetos era mucho menor que el total que establecí usando el parámetro -Xmx? Por ejemplo, digamos que configuro -Xmx a '2048m'. Cuando analicé el archivo de volcado, encontré un total de 400Mb de objetos en el Heap. Esperaba encontrar 2GB. ¿Me estoy perdiendo de algo?
¿Ha comprobado que su OOME en realidad menciona la memoria del montón? Hay algunos casos (relativamente poco frecuentes) en los que se lanzan OOMEs, pero NO es el montón lo que está lleno. –
Derecha, @Joachim, demasiados hilos en JVM x86 también se cuelga con la excepción OOM – aalku