আমি জাভা সম্পর্কে আরও বোঝার চেষ্টা করছি, বিশেষত মেমরি পরিচালনা এবং থ্রেড সম্পর্কে। এই কারণে আমি সম্প্রতি থ্রেড ডাম্পগুলিতে দেখার আগ্রহ খুঁজে পেয়েছি।
জাভা জন্য অন্তর্নির্মিত সরঞ্জাম ভিজুয়ালভিএম ব্যবহার করে কোনও ওয়েব অ্যাপ থেকে নেওয়া কয়েকটি লাইন এখানে দেওয়া হয়েছে:
"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)
প্রথমে আমার কিছু পরিবর্তনশীল নাম সম্পর্কে প্রশ্ন রয়েছে:
- জোয়ার ও শুঁটকির অর্থ কী?
- অবজেক্ট.ওয়েটের পরে স্কোয়ারড প্রথম বন্ধনীতে চিত্রটি কী?
তারপরে স্ট্যাক ট্রেসের জন্য:
- <.....> (একটি জাভা.লং ....) এ অপেক্ষা করার অর্থ কী এবং <..> এ সংখ্যাটি কী
- এটি লক হওয়া মানে কী <<> (একটি জাভা.লং ....) একই প্রশ্ন, <<> কী আছে
আমি ভেবেছিলাম লক শব্দটি কোনওভাবে অপেক্ষা করার শর্তের সাথে সম্পর্কিত, তবে আমি ভুল ছিলাম। প্রকৃতপক্ষে, আমি ভাবছি কেন লক কেন তিনবার পুনরাবৃত্তি হয়, তবে থ্রেডটি একই ডাম্পের মতো দেখা যায়:
"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 কি?
থ্রেড ক্লাসের কোনও প্রমাণ ছাড়াই স্ট্যাক ট্রেসটি এত ছোট কেন?
আপনি যদি আমার সমস্ত প্রশ্নের উত্তর দিতে পারতেন তবে আমি খুব কৃতজ্ঞ হব।
ধন্যবাদ