¿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?
Respuesta
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
}
Puede añadir Java opta por ver qué clase se carga a través de:
java -verbose:class
Sobre clase destruida, no estoy seguro.
¿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.
Puede agregar command line option-verbose:class
a su proceso de Java, esto mostrará información sobre cada clase cargada.
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
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.
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 ...]
- 1. Android: ¿Cuándo se destruye el contexto OpenGL?
- 2. ¿Cómo se desactiva la carga/inicialización de la clase perezosa en la JVM de Sun?
- 3. ¿Cuándo se destruye la instancia creada por el servidor?
- 4. ¿Cuándo se destruye esta variable de miembro VB6?
- 5. ¿En qué orden se inicializan las diferentes partes de una clase cuando se carga una clase en la JVM?
- 6. ¿Se destruyen los atributos de referencia cuando se destruye la clase en C++?
- 7. Cómo rastrear el uso de la aplicación en Android? ¿Cómo detectar cuándo se lanza una actividad?
- 8. JAVA_HOME se destruye por Maven
- 9. ¿Cómo puedo saber cuándo se carga una imagen en Picturebox
- 10. ¿Puedes rastrear cuándo se ha terminado una aplicación de Android?
- 11. Bloqueo de JVM mientras memcpy durante la carga de clase
- 12. Se destruye el búfer mientras se analiza CEDET
- 13. ¿Cuándo se crea PropertyChangedEventManager y cuándo se adjunta?
- 14. ¿Qué significa "Cuando se carga una clase" en realidad?
- 15. ¿Cómo puedo detectar cuándo se carga una página web?
- 16. ¿Cuándo se carga el archivo de configuración de logback?
- 17. ¿Cuándo JVM de Java descomprime archivos jar?
- 18. ¿Cómo se diferencian las "JVM modernas" de las JVM antiguas?
- 19. node.js proceso generado se queda si se destruye el script
- 20. Cómo rastrear cuándo se creó/actualizó una fila automáticamente en SQL Server?
- 21. Encuentra dónde se carga la clase java desde
- 22. La referencia de interfaz no utilizada no se destruye
- 23. ¿Cuándo se carga el archivo en la memoria, para las llamadas fread, fopen y fwrite?
- 24. SurfaceView con vista previa de la cámara no se destruye
- 25. ¿Cómo se implementa la función de JVM persistentes en cake?
- 26. ¿Cómo depurar/registrar/rastrear un problema de carga de applet?
- 27. ¿Alguna vez se destruye el contexto de la aplicación Android?
- 28. ¿Cómo se verifica el bytecode en la JVM?
- 29. ¿Cuándo y cómo se ejecuta Asynchronous Google Analytics?
- 30. Cómo rastrear errores cuando se inicia la función web Azure?
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