2009-05-17 17 views
2

Ich versuche, eine Anwendung zu profilieren, und ich habe viele Fälle von Typ sim.core.EndPoint $ 2Dollarzeichen in VisualVM

Wenn ich diese Instanzen überprüfen prüfe ich sie nicht vom Typ sim.core.EndPoint , sie scheinen ein EndPoint zu sein mit ein paar mehr Dingen, die nicht da sein sollten.

Was bedeutet ein Dollarzeichen nach dem Namen eines Typs in visualVM?

Vielen Dank.

Antwort

3

Das bedeutet, es ist eine anonyme innere Klasse in EndPoint.java definiert.

Übrigens ist ClassName $ AnotherName eine Konvention zum Angeben von inneren Klassen in JVM.

Schauen Sie, welche anonymen Klassen EndPoint definiert.

+0

Nun, kann es nicht sein. Da ich in EndPoint.java nur eine innere Klasse habe, scheinen EndPointStats und EndPoint $ 2 Dinge zu haben, die nichts mit Stats zu tun haben, wie Felder, die mit Aufgabenplanung usw. zu tun haben. Danke für Ihre Hilfe. – simao

+0

Können Sie EndPoint.java irgendwo einfügen? – alamar

1

Es ist sicherlich ein Compiler-Artefakt (etwas, das für Sie versteckt ist, aber dafür notwendig ist).

Wenn es sich nicht um eine anonyme Klasse handelt, kann das anonyme Objekt möglicherweise auf die umschließende Klasse verweisen. Hast du irgendwelche finalen Objekte auf der "Außenseite", auf die du dich innerhalb deiner anonymen Klasse beziehst?

+0

Eigentlich starte ich eine neue anonyme sim.core.Task-Klasse, die einen EndPoint verwendet, der "outside" als final deklariert wird. Also bezieht sich $ 2 auf diese sim.core.Task? – simao

+0

Nein, es bezieht sich wahrscheinlich auf den EndPoint. Der Java-Compiler verwendet Tricks, um Ihrer anonymen Klasse zu ermöglichen, selbst dann zum Finale zu gelangen, wenn sie sich in einer anderen Klasse befindet. –