2012-03-29 6 views
19

¿Cómo puedo realizar un seguimiento cuando la clase se carga y destruye en jvm? ¿Hay algún método de devolución de llamada que expone el jvm?¿Cómo rastrear cuándo se carga la clase y se destruye en jvm?

+0

Haga aquí dos preguntas en una. ¿Qué estás tratando de aprender o tratando de lograr exactamente? Una vez que te hayas dado cuenta, acepta la respuesta que más te ha ayudado con eso. – Frans

Respuesta

0

Puede usar el bloque estático para detectar la carga de clases, pero no puede detectar la descarga de clases. En Java, todas las clases cargadas a través del cargador de clases del sistema nunca se descargarán y todas las clases cargadas a través de otros cargadores de clases se descargarán solo cuando el cargador de clases esté descargado.

static{ 

     //execute when the class will be loaded 

    } 
5

Puede añadir Java opta por ver qué clase se carga a través de:

java -verbose:class 

Sobre clase destruida, no estoy seguro.

0

¿Desea esta información en su aplicación o simplemente desea analizarla desde el exterior? En este último caso, puede usar VisualVM para eso. Tal vez su pregunta está relacionada con este: Loaded classes in VisualVM.

7

Puede agregar command line option-verbose:class a su proceso de Java, esto mostrará información sobre cada clase cargada.

0

Puede rastrear la creación de la clase en el constructor estático. Y no puedes rastrear su destrucción en lo que a mí respecta. Las clases solo se descargan cuando gc recopila el cargador de clases que se utilizó para cargar las clases.
Usted también puede estar interesado en leer este: another question on classloaders at StackOverflow

2

Si están bien con el uso de JRockit JVM, puede hacer uso de las API de abajo, lo que dará métodos de devolución de llamada cuando se carga una clase y clase se descarga.
Eche un vistazo a la clase JVM desde la que se supone que debemos usar el método getClassLibrary().
En el objeto de ClassLibrary podemos registrar detectores de eventos de carga de clases que da los nombres de las clases etc.

21

Si estás utilizando un Sun/Oracle JVM, podría utilizar los TraceClassLoading y TraceClassUnloading opciones. Utilice la siguiente para ver qué opciones compatible con la JVM:

java -XX:+AggressiveOpts -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+PrintFlagsFinal -version 

Si se admiten estas opciones, ejecutar la aplicación Java usando -XX:+TraceClassLoading -XX:+TraceClassUnloading. Debería ver mensajes como:

[Loaded ... from ...] 
[Unloading class ...] 
Cuestiones relacionadas