Pregunta

Esta pregunta es de alcance limitado a HotSpot generaciones . ¿Hay alguna forma de averiguar mediante programación en el que la generación de unas vidas caso particular. Los datos tales como:

  • joven o vieja generación?
  • Si joven, cuyo espacio sobreviviente?
  • En el interior TLAB? Por cuál de ellos?

Cualquier técnica (ex, BTrace , JVMTI ) funciona tanto tiempo como puedo hacer algo como esto:

Object x = new Object();
HotSpotGenerationInfo info = HotSpotGenerationUtil.getInfo(x);

Los mendigos no pueden elegir pero lo ideal es que también podría aprender cuando la instancia de interés se está moviendo de una generación a otra en el momento en que sucede (es decir, un evento de devolución de llamada basada - no le interesa en la demora y gastos generales implícita en polling).

No hay interés en las respuestas que acaba de decir "no" sin justificación :)

¿Fue útil?

Solución

Por lo que yo sé, no se puede directamente consulta que bloque de memoria un objeto actualmente vive en. Sin embargo, los objetos son promovidos a un banco de memoria diferente por un plazo de recolección de basura, y se puede consultar el número de Mayor CG / menor corre desde VM empezar a utilizar JMX. Si, además, toma nota de estos contadores, cuando se crea el objeto, se puede reconstruir si hubo un GC desde entonces y del que agrupe las vidas de objeto en.

Otros consejos

Hay una complicación adicional a la "contar el número de GC desde que se creó el objeto" enfoque - que no toma en cuenta prematura promoción objeto .

Si los espacios de supervivencia son básicamente demasiado pequeña, y la presión de la memoria del Edén (es decir, la velocidad de los objetos que sobreviven al menos una vez) es alta, entonces los objetos será promovido a tenured antes de alcanzar el límite de permanencia completa.

En los ejemplos reales, aplicaciones saludables suele tener distintos de cero porcentajes de promoción prematura. De hecho, una tasa de promoción prematura 0% es una muy mala señal - que dice que sus espacios de supervivencia son mucho, mucho demasiado grande y usted está perdiendo una gran cantidad de memoria

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