Pregunta

Escribiendo un perfil también implementaría la tarea típica de perfiles de montón. Específicamente, me gustaría rastrear, ¿qué hilo ha asignado cuántos datos? Usando jvmti pensé que era suficiente para enganchar a los eventos Asignación de objetos de VM y Sin objetos. Lamentablemente leí el primer evento no se activa debido a las llamadas realizadas a new.

La última idea que tuve fue consultar el evento MethodExit Si su nombre es <init> y así declara esta llamada como una asignación de objetos. Sin embargo, dentro de este evento no puedo obtener el objeto y, por lo tanto, no puedo invocar GetObjectSize.

Simplemente iterando sobre el montón, no tiene información sobre qué objeto se asignó por qué hilo. ¿Alguien tiene una idea de cómo implementar esto?

¿Fue útil?

Solución

¿Hay alguna razón por la que no puedas llamar? GetObjectSize desde el MethodEntry ¿Evento para un constructor?

Si está interesado en ejecutar código antes de que regrese un método, puede escuchar el MethodEntry evento, y si se nombra el método <init>, Puedes llamar NotifyFramePop para escuchar el FramePop evento para el marco actual. Este evento es similar al MethodExit evento, pero ocurre antes de que el método regrese para que aún pueda obtener el this objeto.

Otros consejos

Una mirada rápida a la implementación de la nueva VM (TempLatetable_x86_64.cpp) parece indicar que _new no ofrece ningún gancho para JVMTI (ni siquiera en el caso lento que parece). Entonces, si tu truco no funciona, no veo ninguna otra posibilidad, pero de ninguna manera soy un experto para JVMTI.

Supongo que compilar su propia VM de punto de acceso con un pequeño parche, ¿no es especialmente útil para usted?

Este demo de monedas Le ilustra cómo rastrear todos los objetos en el montón. Porque el Evento vmobjectalloc se envía solo cuando ocurre la reflexión, la demostración usa ByTecodeIntrument para rastrear una nueva asignación de objetos.


Puede usar la función GetCurrentThread para saber a qué hilo se pertenece el objeto.

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