2011-08-15 17 views
6

डिफ़ॉल्ट रूप से, हॉटस्पॉट के साथ, एक के लिए CTRL-तोड़ धागा डंप सूचीबद्ध नहीं करेगा क्या धागे java.lang.concurrent ताले पकड़े हुए हैं। और मैं समझता हूं कि इन ताले के साथ, हॉटस्पॉट के बारे में जानकारी नहीं हो सकती है कि किस स्टैक फ्रेम को लॉक अधिग्रहित किया गया था। आप JVM विकल्प -XX:+PrintConcurrentLocks जोड़ते हैं, तो एक के लिए CTRL-तोड़ ढेर डंप (एक थ्रेड स्टैक ट्रेस करने के बाद) सूची जाएगा कि फ्रेम द्वारा आयोजित किसी भी समवर्ती ताले। उदाहरण के लिए:क्यों इस हॉटस्पॉट JVM नहीं विकल्प डिफ़ॉल्ट रूप है? -XX: + PrintConcurrentLocks

"D-Java-5-Lock" prio=6 tid=0x00000000069a1800 nid=0x196c runnable [0x000000000770f000] 
    java.lang.Thread.State: RUNNABLE 
     at com.Tester.longDelay(Tester.java:41) 
     at com.Tester$D.run(Tester.java:88) 

    Locked ownable synchronizers: 
     - <0x00000007d6030898> (a java.util.concurrent.locks.ReentrantLock$NonfairSync) 

इस विकल्प के बिना, यह क्या धागा पोस्टमार्टम में इस लॉक कर रहा है यह पता लगाने के लिए संभव नहीं है। यह विकल्प डिफ़ॉल्ट क्यों नहीं है? क्या कुछ गैर-स्पष्ट प्रदर्शन या स्थिरता जुर्माना है? जब मैं इस पर चर्चा खोजने के लिए खोज करता हूं, कुछ भी नहीं आता है।

उत्तर

2

मैंने ओरेकल से पूछा (मेरे नियोक्ता के पास एक समर्थन संपर्क है) और जवाब मूल रूप से है कि विकल्प का उपयोग सुरक्षित है और डिफ़ॉल्ट रूप से कई शुद्ध-नैदानिक ​​विशेषताएं अक्षम हैं और यह उन विकल्पों में से एक है। IMO, अगर एक नैदानिक ​​सुविधा सुरक्षित और स्थिर है और निष्पादन दंड का परिचय नहीं है, फिर उस पर डिफ़ॉल्ट रूप से होना चाहिए। ऐसा प्रतीत होता है कि यह (तब) सूर्य और (अब) ओरेकल पर दृश्य नहीं है।

+0

विवरण जोड़ें। – egorlitvinenko

2

ठीक है, मेरा अनुमान है कि यह अस्थिर है, या JVM रखरखाव (सूर्य-अब-ओरेकल) बस इसे एक समर्थित सुविधा के रूप में बनाए रखना नहीं चाहता है। आप इसे -XX: उपसर्ग द्वारा बता सकते हैं:

-XX के साथ निर्दिष्ट विकल्प स्थिर नहीं हैं और आकस्मिक उपयोग के लिए अनुशंसित नहीं हैं। ये विकल्प बिना किसी सूचना के बदल सकते हैं।

- से Java HotSpot VM Options

इसके अलावा उस पृष्ठ से

, उस विकल्प को गतिशील सक्षम जा सकता है या अक्षम JDK प्रबंधन इंटरफ़ेस के माध्यम है, तो आप अगर आप की जरूरत है एक MXBean के माध्यम से इसे सक्षम कर सकते हैं।

झंडे प्रबंधनीय के रूप में चिह्नित JDK प्रबंधन इंटरफ़ेस (com.sun.management.HotSpotDiagnosticMXBean एपीआई) और यह भी JConsole के माध्यम से के माध्यम से गतिशील रूप से लिखने योग्य नहीं है। जावा एसई 6 प्लेटफार्म अनुप्रयोगों की निगरानी और प्रबंधन में, चित्रा 3 एक उदाहरण दिखाता है। प्रबंधनीय झंडे भी jinfo -flag के माध्यम से सेट किया जा सकता है।

अंत में, jstack स्टैक ट्रेस टूल किसी भी समय समान कार्यक्षमता को बिना किसी सक्षम किए सक्षम कर सकता है।

0

वजह से, केवल ReentrantLocks पता है जो धागे वे जुड़े हुए हैं। इस विधि के रनटाइम अहसास पर इस जानकारी को प्राप्त करने के लिए सभी ताले और उनके धागे को खोजने के लिए ढेर पर जाएं।

संबंधित मुद्दे