Das Verständnis der Reference Handler thread
Bin ich weiterhin mein Weg zum tiefen Verständnis der Java-Thread. Leider ist mein Java-Zertifizierung nicht abdecken, dass ein Teil, so dass der einzige Weg zu lernen ist zu stellen Sie eine Reihe von dummen Fragen. Mit so vielen Jahren der Entwicklung mit Java, ich habe mich mal gefragt, wie viel ich noch zu lernen 🙂
Insbesondere meine Aufmerksamkeit ist nun mit dem Referenz-handler-thread.
"Reference Handler" daemon prio=10 tid=0x02da3400 nid=0xb98 in Object.wait() [0x0302f000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x1aac0320> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:485)
at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)
- locked <0x1aac0320> (a java.lang.ref.Reference$Lock)
Nun einige Fragen sind folgende, für einige von Ihnen, ich weiß die Antwort, aber ich bin nicht posting, denn ich würde gerne hören, jemand anderes Meinungen:
- Was ist die Reference Handler thread tun soll ?
- Einen thread dump sollte berücksichtigt werden, bottom-up, warum muss der stack-trace starten mit gesperrt, sollte nicht die lock-Anweisung erscheint zumindest nach dem thread laufen hat ?
- Was bedeutet "Native Methode" bedeutet ?
- Warum "Unbekannte Quelle", in diesem Fall der thread-dump nicht erinnern können den source-code ?
- Schließlich das warten auf und gesperrt hat das gleiche , warum ?
als üblich, ich bitte, die Fragen zu beantworten, so dass ich die Marke beantwortet.
Du musst angemeldet sein, um einen Kommentar abzugeben.
java.lang.ref.Reference$Lock
war gesperrt in der Methode erwähnt, in die Zeile vorhergehenden es (ich.e inReferenceHandler.run()
..class
Datei enthält keine source-code, location information (zumindest für diesen speziellen Punkt). Dies kann passieren entweder wenn die Methode einem synthetischen (nicht Aussehen wie hier), oder die Klasse kompiliert wurde ohne debug-Informationen.waiting on
ohne eine entsprechendelocked
.1) Der finalizerthread ruft finalizer-Methoden.
Der Referenz-Thread hat einen ähnlichen Zweck.
http://www.java2s.com/Open-Source/Java-Document/6.0-JDK-Core/lang/java/lang/ref/Reference.java.htm
Die OpenJDK-source-Staaten ist eine seiner
GC schafft eine einfach verkettete Liste von Referenzen, die bearbeitet werden müssen und dieser thread schnell fügt Sie zu einem richtigen Warteschlange. Der Grund dies geschieht in zwei Phasen ist, dass der GC nichts tut, sondern finden Sie die Referenzen, dieser thread ruft code, der verarbeitet diese Verweise z.B. Call-Reiniger, und Sie werden benachrichtigt ReferenceQueue Zuhörer.
2) Eine Sperre für eine synchronisierte Methode, bevor Sie eingegeben wird.
3-5) bedeckt, von Joachim 😉
finalize()
ist aufgerufen, wenn es überschrieben wird, auch wenn er nicht mit einer leeren Methode.Wow, zu tief für mich. Ich kann nur beantworten Sie ein oder zwei Ihrer Fragen.
"Native Methode" bedeutet einfach, die Implementierung der Methode ist in einigen nativen (d.h. C oder C++) - Bibliothek. Sobald die Aufruf-stack "gone native", die JVM kann nicht mehr überwachen. Keine Möglichkeit für eine zusätzliche stack-Informationen.
"Unbekannten Quelle" wahrscheinlich bedeutet, dass der code kompiliert wurde, mit Optimierung und debugging-Informationen ausgeschaltet (
-g
flag?). Dies beseitigt die Datei - /line-Informationen aus dem .Klasse Datei.