Come si tiene traccia quando la classe viene caricata e distrutta in jvm? Esiste un metodo di callback esposto da jvm?Come tenere traccia quando la classe viene caricata e distrutta in jvm?
risposta
È possibile utilizzare blocco statico per rilevare il caricamento della classe, ma non è possibile rilevare lo scarico di classe. In java tutte le classi caricate attraverso il classloader di sistema non verranno mai scaricate e tutte le classi caricate tramite altri classloader verranno scaricate solo quando il programma di caricamento di classe viene scaricato.
static{
//execute when the class will be loaded
}
È possibile aggiungere Java opta per vedere quale classe viene caricata tramite:
java -verbose:class
A proposito di classe distrutta, non sono sicuro.
Vuoi queste informazioni nella vostra applicazione o vuoi semplicemente analizzare che dall'esterno? In quest'ultimo caso potresti forse usare VisualVM per quello. Forse la tua domanda è legata a questo: Loaded classes in VisualVM.
È possibile aggiungere command line option-verbose:class
al proprio processo Java, per visualizzare informazioni relative a ciascuna classe caricata.
È possibile tenere traccia della creazione della classe nel costruttore statico. E tu non puoi rintracciare la sua distruzione per quanto mi riguarda. Le classi vengono scaricate solo quando gc raccoglie il classloader che è stato utilizzato per caricare le classi.
Potreste anche essere interessati a leggere questo: another question on classloaders at StackOverflow
Se sono ok con l'utilizzo di JRockit JVM, si può fare uso delle API di sotto, che vi darà richiamata metodi quando una classe viene caricata e la classe viene scaricato.
Dai un'occhiata alla classe JVM da cui dovremmo utilizzare il metodo getClassLibrary()
.
Sull'oggetto ClassLibrary possiamo registrare i listener per classloading eventi che dà i nomi delle classi, ecc
Se stai usando un Sun/Oracle JVM, è possibile utilizzare le opzioni TraceClassLoading
e TraceClassUnloading
. Utilizzare il seguente per vedere quali opzioni sostiene il vostro JVM:
java -XX:+AggressiveOpts -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+PrintFlagsFinal -version
Se queste opzioni sono supportate, eseguire l'applicazione Java utilizzando -XX:+TraceClassLoading -XX:+TraceClassUnloading
. Dovresti vedere messaggi come:
[Loaded ... from ...]
[Unloading class ...]
- 1. rapido. AVPlayer. Come tenere traccia quando la canzone è finita?
- 2. Tenere traccia dell'indice corrente quando si applica
- 3. Tenere traccia delle modifiche alle liste e dizionari in Python?
- 4. Quando viene caricata la mappa sorgente jQuery?
- 5. Come tenere traccia dei messaggi in Android?
- 6. In che ordine sono le diverse parti di una classe inizializzate quando una classe viene caricata nella JVM?
- 7. Come viene inizializzata la vista quando caricata tramite uno storyboard?
- 8. Gli attributi di riferimento vengono distrutti quando la classe viene distrutta in C++?
- 9. Tenere traccia delle modifiche - Django
- 10. Quando JVM carica la classe di annotazione
- 11. Rileva quando viene caricata un'applet
- 12. Come tenere traccia degli utenti tra domini?
- 13. Come tenere traccia degli eventi nell'estensione?
- 14. Come passare a TFS automaticamente quando viene caricata la soluzione?
- 15. Quando esattamente una classe è stata caricata?
- 16. Cosa significa in realtà "Quando una classe è caricata"?
- 17. Tenere traccia degli utenti registrati in PHP
- 18. Tenere traccia di indice in rapida enumerazione
- 19. Tenere traccia delle classi di utilità
- 20. Immagine ottenendo distrutta quando viene messo nella cartella drawable
- 21. Attendi fino a quando la funzione non viene caricata
- 22. Come tenere traccia degli ascoltatori in Firebase su Android?
- 23. Grand Central Dispatch: mostra la prima immagine quando viene caricata?
- 24. Cosa accade quando la mia attività viene distrutta quando utilizzo IntentService con ResultReceiver
- 25. Android c'è qualche richiamata vista quando viene distrutta?
- 26. Ottieni bytecode dalla classe caricata
- 27. iOS: la foto caricata su Facebook non viene sempre caricata
- 28. Come tenere traccia delle applicazioni WinRT (in Win32 era semplice)?
- 29. Come tenere traccia di più eventi tattili in Libgdx?
- 30. Come tenere traccia della modifica della data in Java
Stai facendo due domande in una qui. Che cosa stai cercando di apprendere o provare esattamente a realizzare? Una volta capito, accetta la risposta che ti ha aiutato di più. – Frans