Je suis en train d'essayer de comprendre plus au sujet de java, en particulier à propos de la gestion de la mémoire et les threads. Pour cette raison, j'ai récemment trouvé un intérêt dans la recherche au fil des décharges.
Voici quelques lignes d'une application web à l'aide de VisualVM, un outil intégré pour java:
"Finalizer" daemon prio=8 tid=0x02b3d000 nid=0x898 in Object.wait() [0x02d0f000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x27ef0288> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
- locked <0x27ef0288> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)
Locked ownable synchronizers:
- None
"Reference Handler" daemon prio=10 tid=0x02b3b800 nid=0x494 in Object.wait() [0x02cbf000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x27ef0310> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:485)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
- locked <0x27ef0310> (a java.lang.ref.Reference$Lock)
D'abord j'ai des questions à propos de certains noms de variables:
- ce n'tid et le nid veux dire?
- Qu'est-ce que la figure en carré entre parenthèses après l'Objet.attendre?
Alors pour la trace de la pile elle-même:
- ce qui signifie en attente sur <.....> (java.lang....) et quel est le nombre de <..>
- que signifie verrouillé <.....> (java.lang....) même question, ce qui est dans <..>
J'ai pensé que le mot verrouillé était lié d'une certaine manière à une condition d'attente, cependant, j'ai eu tort. En fait, je me demande pourquoi verrouillé est répété trois fois, mais le fil est dans l'état exécutable comme on le voit dans le même dump:
"Thread-0" prio=6 tid=0x02ee3800 nid=0xc1c runnable [0x03eaf000]
java.lang.Thread.State: RUNNABLE
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(FileInputStream.java:199)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:256)
at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
- locked <0x23963378> (a java.io.BufferedInputStream)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
- locked <0x23968450> (a java.io.InputStreamReader)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at java.io.BufferedReader.fill(BufferedReader.java:136)
at java.io.BufferedReader.readLine(BufferedReader.java:299)
- locked <0x23968450> (a java.io.InputStreamReader)
at java.io.BufferedReader.readLine(BufferedReader.java:362)
at org.codehaus.plexus.util.cli.StreamPumper.run(StreamPumper.java:145)
Puis le dernier de tous, ce fut le pire d'entre eux:
"CompilerThread0" daemon prio=10 tid=0x02b81000 nid=0x698 waiting on condition [0x00000000]
java.lang.Thread.State: RUNNABLE
Ce fil est dans l'état exécutable, mais il est en attente sur la condition. Quel état et quel est 0x00000?
Pourquoi la trace de la pile est de courte durée sans aucune preuve de la classe thread?
Si vous pouviez répondre à toutes mes questions, je serais très reconnaissant.
Merci