Estoy viendo 'java.lang.OutOfMemoryError: PermGen space' mientras ejecuto ~ 300 pruebas de JUnit y usando Spring context. Tener un tiempo difícil averiguar lo que está comiendo PermGen desde:¿Qué, además de objetos de Clase, se almacena en Perm Gen Space (sol 1.6 VM)?
- en estado estacionario, la aplicación consume alrededor de 90 millones de espacio PermGen
- -XX He intentado: MaxPermSize = 256 m para las pruebas unitarias - sigue funcionando sin
- Con
-XX:+TraceClassLoading
y-XX:+TraceClassUnloading
activados, no veo eventos de "carga adicionales" mientras ejecuto las últimas 20-30 pruebas antes delOutOfMemoryError
.
Este último parece indicar que algo además de los objetos de clase está llenando PermGen, ¿no? Si es así, ¿qué podría ser? Por ejemplo, ¿existen circunstancias cuando las instancias de clase se almacenan en PermGen?
Aquí está mi información VM:
$ java -version
java version "1.6.0_25"
Java(TM) SE Runtime Environment (build 1.6.0_25-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.0-b11, mixed mode)
relacionados
Fwiw, la raíz de mi problema que precipitó este post resultó ser algo trivial: Supuse que Maven plugin de éxito seguro hereda la configuración de la máquina virtual de MAVEN_OPTS (o instancia de máquina virtual que ejecuta mvn) cuando bifurca una VM - no es (boo). Uno tiene que especificar los que usan explícitamente argLine en la configuración del complemento. HTH.
JProfiler o YourKit le dará más información acerca de lo que hay allí. – bmargulies
@bmergulies - ¡Excelente idea para usar un generador de perfiles! –
Sin ver su código, mi primer pensamiento es que el contexto de primavera se está instanciando para cada caso de prueba. – Woot4Moo