मैं जावा के बारे में अधिक समझने की कोशिश कर रहा हूं, विशेष रूप से स्मृति प्रबंधन और थ्रेड्स के बारे में। इस कारण से मुझे हाल ही में थ्रेड डंप को देखने में रुचि मिली है।
यहाँ विज़ुअलम, जो जावा के लिए एक बिल्ट-इन टूल का उपयोग करके वेब ऐप से कुछ पंक्तियाँ ली गई हैं:
"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)
पहले मेरे पास कुछ चर नामों के बारे में प्रश्न हैं:
- tid और nid का क्या अर्थ है?
- Object.wait के बाद चौकोर कोष्ठक में आकृति क्या है?
फिर स्टैक ट्रेस के लिए ही:
- इसका मतलब क्या है <.....> (एक java.lang ....) पर प्रतीक्षा करना और <..> में नंबर क्या है
- इसका क्या अर्थ है कि लॉक किया गया <.....> (एक java.lang ....) एक ही प्रश्न, क्या है <..> में
मुझे लगा कि लॉक शब्द किसी प्रतीक्षा की स्थिति में संबंधित था, हालांकि, मैं गलत था। वास्तव में, मैं सोच रहा हूं कि लॉक को तीन बार क्यों दोहराया जाता है, लेकिन धागा रन करने योग्य स्थिति में है जैसा कि एक ही डंप में देखा गया है:
"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)
तब सब से आखिरी, यह उनमें से सबसे खराब था:
"CompilerThread0" daemon prio=10 tid=0x02b81000 nid=0x698 waiting on condition [0x00000000]
java.lang.Thread.State: RUNNABLE
यह धागा रन करने योग्य स्थिति में है, लेकिन यह स्थिति पर प्रतीक्षा कर रहा है। क्या स्थिति है और 0x00000 क्या है?
थ्रेड क्लास के किसी भी सबूत के बिना स्टैक ट्रेस इतना छोटा क्यों है?
यदि आप मेरे सभी सवालों का जवाब दे सकते हैं तो मैं बहुत आभारी रहूंगा।
धन्यवाद