2010-02-25 11 views
6

Háganme saber cuál es la mejor forma de determinar la composición de la memoria de la generación joven promovida a la generación anterior, después de cada evento joven de GC?Java GC: clases de objetos superiores promocionadas (por tamaño)?

Idealmente me gustaría saber los nombres de clase que son responsables, digamos, del 80% del montón en cada fragmento de promoción "joven generación -> vieja generación";

Ejemplo: Tengo 600 millones de jóvenes, cada tenencia promueve 6M; Quiero saber qué objetos componen este 6M.

Gracias.

Respuesta

6

No hay una manera fácil de hacerlo, sin embargo, recientemente he estado analizando el rendimiento de la memoria de grandes aplicaciones Java, y puedo compartir algo de experiencia.

Así es como me encontré con lo que los objetos se están promoviendo a la vieja generación:

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

Ahora carga el archivo .prof en Memory analyser (la mejor herramienta para esto, las manos hacia abajo) me gustaría pasar un día jugando con el analizador de memoria para entenderlo, mira la cámara de pantalla (necesita un inicio de sesión, pero vale la pena).

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

Este es el truco: en la pantalla de resumen del analizador de memoria, hay un enlace a: "Histograma de objetos inalcanzables". Ahora estos objetos deben ser recolectados durante el próximo CG. Pero algunos probablemente estén en eden, algunos en sobrevivientes y otros en viejos.

Ahora, obtenga un perfilador con capacidad de generación de perfiles de memoria, prefiero su kit. Ejecute su aplicación con su kit y registre la asignación de objetos.

Ejecútelo y registre la creación de objetos. Una vez que tenga una lista de objetos creados, use las tres listas para obtener una idea de lo que está sucediendo. Haz lo que los humanos hacen mejor, ve patrones.

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

Otra manera de acercarse es YourKit generations view. Puede tomar instantáneas de su montón y comparar qué objetos están todavía vivos entre las instantáneas. Si usa esto con visualgc, puede determinar cuánto tiempo debe estar vivo un objeto para promocionarse a la generación anterior, y tomar instantáneas en estos intervalos para ver qué objetos están todavía vivos.

Bueno, buena suerte. /JT

Cuestiones relacionadas