2012-03-29 2 views
19

Wie behalte ich den Überblick, wenn die Klasse in jvm geladen und zerstört wird? Gibt es eine Callback-Methode, die vom jvm bereitgestellt wird?Wie verfolgen, wenn die Klasse in jvm geladen und zerstört wird?

+0

Sie fragen zwei Fragen in einem hier. Was genau versuchen Sie zu lernen oder zu erreichen? Sobald Sie das herausgefunden haben, akzeptieren Sie die Antwort, die Ihnen dabei am meisten geholfen hat. – Frans

Antwort

0

Sie können den statischen Ladevorgang verwenden, um das Laden von Klassen zu erkennen, aber das Entladen von Klassen nicht. In Java werden alle Klassen, die über den Systemklassenlader geladen werden, niemals entladen und alle Klassen, die über andere Klassenlader geladen werden, werden nur entladen, wenn der Klassenlader entladen wird.

static{ 

     //execute when the class will be loaded 

    } 
5

Sie hinzufügen können Java sehen entscheidet sich, zu welcher Klasse geladen wird über:

java -verbose:class 

Über zerstört Klasse, bin ich nicht sicher.

0

Möchten Sie diese Informationen in Ihrer Anwendung haben oder wollen Sie das nur von außen analysieren? In letzterem Fall können Sie vielleicht VisualVM dafür verwenden. Vielleicht hängt Ihre Frage mit dieser Frage zusammen: Loaded classes in VisualVM.

7

Sie können die command line option-verbose:class Ihrem Java-Prozess hinzufügen, dies wird Informationen über jede geladene Klasse anzeigen.

0

Sie können die Erstellung von Klassen im statischen Konstruktor verfolgen. Und für mich kann die Zerstörung nicht verfolgt werden. Klassen werden nur entladen, wenn gc den Klassenlader sammelt, der zum Laden der Klassen verwendet wurde.
könnten Sie auch lesen interessieren: another question on classloaders at StackOverflow

2

Wenn bei der Verwendung von JRockit JVM ok sind, können Sie die Verwendung der APIs unten machen, die Sie Methoden Rückruf geben, wenn eine Klasse geladen und Klasse entladen wird.
Werfen Sie einen Blick auf JVM Klasse, von denen wir die getClassLibrary() Methode verwenden sollen.
Auf dem Classlibrary Objekt können wir Zuhörer registrieren Veranstaltungen für Classloading, die die Klassennamen usw.

21

Wenn Sie mit einer Sun/Oracle JVM gibt, können Sie die TraceClassLoading und TraceClassUnloading Optionen. Verwenden Sie die folgenden, um zu sehen, welche Möglichkeiten Ihre JVM unterstützt:

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

Wenn diese Optionen unterstützt werden, führen Sie Ihre Java-Anwendung -XX:+TraceClassLoading -XX:+TraceClassUnloading verwenden. Sie sollten Nachrichten wie sehen:

[Loaded ... from ...] 
[Unloading class ...] 
Verwandte Themen