Pregunta

Por favor, hágamelo saber cuál es la mejor manera de determinar la composición de la memoria generación joven promovido a la vieja generación, después de cada evento GC joven?

Lo ideal sería que me gustaría saber los nombres de clase que son responsables por ejemplo, el 80% de los del montón en cada "generación joven -> vieja generación" trozo de promoción;

Ejemplo: Tengo 600M joven generación, cada tenencia promueve 6M; Quiero saber qué objetos componen esta 6M.

Gracias.

¿Fue útil?

Solución

No hay manera fácil de hacer esto, sin embargo, he estado recientemente rendimiento de la memoria de análisis de grandes aplicaciones Java, y puede compartir un poco de experiencia.

Aquí es cómo encontré lo que los objetos se están promoviendo a la vieja generación:

En primer lugar es necesario identificar qué objetos están en la "vieja / tenured" espacio. Esto es, básicamente, que el análisis estándar de Java montón. Por ello recomiendo jmap. Es parte de la JVM sol. correr: jmap -dump:file=heap.hprof PID para obtener un volcado del montón. Esto hará una pausa la JVM durante el volcado (~ durante 30 segundos en un montón de 2 GB)

Ahora carga el archivo .prof en analizador de memoria (la mejor herramienta para esto, sin duda) Me gustaría pasar un día jugando con el analizador de memoria para entenderlo, ver el screencam (necesita un inicio de sesión, pero vale la pena).

Ahora usted sabrá qué objetos están en su montón.

Aquí está el truco: En la pantalla de resumen del analizador de memoria, hay un enlace a: "objetos inalcanzables histograma". Ahora bien, estos objetos son todos a ser recogidos durante el próximo GC. Pero algunos son probablemente en el Edén, en algunos sobrevivientes y algunos en edad.

Ahora, conseguir un poco de perfilador de memoria con capacidad de perfilar, prefiero YourKit. Ejecutar su aplicación con YourKit y la asignación de objeto de registro.

Ejecutar y registro de la creación de objetos. Una vez que tenga una lista de objetos creada utilizar las tres listas para obtener una imagen de lo que está pasando. No lo que los humanos hacen mejor, ver patrones.

  • ¿Qué objetos son creados y son accesibles. (Analizador de memoria)
  • Objetos inalcanzable en el montón (analizador de memoria)
  • Los objetos creados durante una carrera (Profiler)

Otra forma de acercamiento es YourKit generaciones ver . Puede tomar instantáneas de su montón y comparar lo que los objetos siguen vivos entre instantáneas. Si se utiliza este con visualgc puede determinar cuánto tiempo una necesidad de objetos estar vivo para ser promovido a la vieja generación, y tomar instantáneas en estos intervalos para ver qué objetos están todavía vivos.

Bueno, buena suerte. / JT

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top