2009-08-22 8 views
1

ich für eine Java-Prüfung studierte und auf einer letzte Prüfung fragten der Dozent diese Frage und im, wenn jemand fragen kann ich es helfen, zu verstehen:Name 2 Java VM Themen

Im Zusammenhang mit dem Java-Threads erklären. Geben Sie ein Beispiel an, wann Sie einen Thread verwenden könnten. Benennen Sie zwei Java Virtual Machine-Threads.

Die ersten beiden Teile der Frage sind einfach genug, aber der Teil über die Benennung der zwei VM-Threads stolpert mich wirklich.

Antwort

5

Ein einfaches Thread-Dump von einem Testprogramm zeigt folgende Themen - eine des Anwendungs-Thread ist, und dann haben Sie 8 andere JVM-Themen:

Full thread dump Java HotSpot(TM) Client VM (14.0-b16 mixed mode): 

"Low Memory Detector" daemon prio=6 tid=0x0aad6c00 nid=0x9c0 runnable [0x00000000] 
    java.lang.Thread.State: RUNNABLE 

"CompilerThread0" daemon prio=10 tid=0x0aad0c00 nid=0x6d4 waiting on condition [0x00000000] 
    java.lang.Thread.State: RUNNABLE 

"Attach Listener" daemon prio=10 tid=0x0aacb400 nid=0xda4 runnable [0x00000000] 
    java.lang.Thread.State: RUNNABLE 

"Signal Dispatcher" daemon prio=10 tid=0x0aaca000 nid=0xcc8 waiting on condition [0x00000000] 
    java.lang.Thread.State: RUNNABLE 

"Finalizer" daemon prio=8 tid=0x0aab7400 nid=0xba0 in Object.wait() [0x0ac2f000] 
    java.lang.Thread.State: WAITING (on object monitor) 
     at java.lang.Object.wait(Native Method) 
     - waiting on <0x029a0b18> (a java.lang.ref.ReferenceQueue$Lock) 
     at java.lang.ref.ReferenceQueue.remove(Unknown Source) 
     - locked <0x029a0b18> (a java.lang.ref.ReferenceQueue$Lock) 
     at java.lang.ref.ReferenceQueue.remove(Unknown Source) 
     at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source) 

"Reference Handler" daemon prio=10 tid=0x0aab2c00 nid=0x418 in Object.wait() [0x0abdf000] 
    java.lang.Thread.State: WAITING (on object monitor) 
     at java.lang.Object.wait(Native Method) 
     - waiting on <0x029a0a20> (a java.lang.ref.Reference$Lock) 
     at java.lang.Object.wait(Object.java:485) 
     at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source) 
     - locked <0x029a0a20> (a java.lang.ref.Reference$Lock) 

"main" prio=6 tid=0x002b6400 nid=0x3d8 runnable [0x0090f000] 
    java.lang.Thread.State: RUNNABLE 
     at TestClass.main(TestClass.java:8) 

"VM Thread" prio=10 tid=0x0aaafc00 nid=0x184 runnable 

"VM Periodic Task Thread" prio=10 tid=0x0aad9000 nid=0xc7c waiting on condition 

Obwohl YMMV, da diese Ergebnisse auf dem stark abhängig sind JVM, die Sie verwenden.

+0

Das beantwortet meine Frage vollständig dank. –

+0

@Shane: nicht ganz. Ein anderer Teil einer idealen Antwort auf solch eine Prüfungsfrage sollte sein "... aber es hängt von der speziellen JVM-Implementierung ab". –

+0

@Stephen - Sie sind richtig, ich werde eine Klarstellung hinzufügen –

0

Also, ich werde dir nicht die Antwort geben. Denken Sie jedoch darüber nach: Java ist eine interpretierte Sprache. Es führt eine virtuelle Maschine selbst (die JVM) aus. Das muss ausgeführt werden, damit Ihre Anwendung (Thread) ausgeführt werden kann. Denken Sie also über alle Threads in der JVM nach, nicht nur die Threads für Ihre Anwendung.

0

jvisualvm ist ein ausgezeichnetes Werkzeug, um eine JVM zur Laufzeit zu untersuchen. Es wird dir viele interessante Dinge erzählen.