मैं बारे में बहुत कुछ सुना है क्या JVM JITs कर सकते हैं करते हैं, लेकिन कैसे प्रोफ़ाइल क्या JIT वास्तव में अपने कार्यक्रम की दी गई समय में क्या कर रहा है के बारे में जानकारी का एक बहुत कुछ नहीं दिख रहा। -XX:+PrintCompilation
और -XX:+PrintOptoAssembly
का उपयोग करने के बारे में बहुत सारी युक्तियां हैं, लेकिन इसके परिणामस्वरूप वास्तव में कम-स्तर की जानकारी होती है जो व्याख्या करना मुश्किल है।JVM JIT नैदानिक उपकरण अनुकूलन युक्तियाँ
सामान्य रूप से, अनुकूलन के दौरान, मुझे समर्पित जेआईटी वार्मअप समय के साथ सामान्य संचालन का बेंचमार्क सूट होना पसंद है, लेकिन मैं यह देखने में सक्षम होना चाहता हूं कि वास्तव में कौन से अनुकूलन मेरे कोड पर फायरिंग कर रहे हैं। शायद मेरे जेवीएम ने एक विशेष विधि कॉल को रेखांकित करने पर विचार किया लेकिन इसके बारे में कुछ ऐसा करने का फैसला नहीं किया गया, या शायद जेआईटी मेरे लूप में सरणी सीमाओं से बचने में असमर्थ था क्योंकि मैंने अपने आविष्कारों और लूपिंग स्थितियों को भी अस्पष्ट रूप से वाक्यांशित किया था। मैं आपकी किट जैसे टूल को "जेआईटी के साथ क्या चल रहा है" के कुछ रूपों का समर्थन करने की उम्मीद करता हूं लेकिन मैं इसके लिए याकिट में कहीं और इसका समर्थन नहीं पा रहा हूं।
आदर्श रूप से मैं अपने कार्यक्रम के दौरान जेआईटी के अनुकूलक क्या सोच रहा है, उसके बारे में सोचने के लिए एक मस्तिष्क डंप पसंद करूंगा। मान लें कि मैंने अपने काम को बहुत गर्म कर दिया है और उसने अपने आंतरिक लूप में तीन तरीकों को रेखांकित करने का फैसला किया है और लूप को तीन खंडों में तोड़ दिया है, जिसमें मध्य भाग पर कोई सरणी सीमा नहीं है, मुझे उन निर्णयों और प्रेरणा का सारांश चाहिए उनके लिए।
क्या मुझे यहां कुछ स्पष्ट याद आ रही है? क्या चल रहा है यह जानने के लिए तंग आंतरिक लूप को अनुकूलित करते समय JVM प्रदर्शन-जागरूक प्रोग्रामर क्या करते हैं? निश्चित रूप से निम्न स्तर -XX
झंडे एकमात्र विकल्प नहीं हो सकते हैं, क्या वे कर सकते हैं? मैं इस बात की सराहना करता हूं कि जेवीएम पर इस प्रकार के निम्न-स्तरीय सामानों से कैसे निपटना है। और नहीं, यह सवाल समयपूर्व अनुकूलन से प्रेरित नहीं है! :)
संपादित करें: मुझे लगता है कि मैं जो कुछ चाहता हूं उसे -XX:+LogCompilation
द्वारा दिया गया है, लेकिन अगर मैं इस तरह की गतिविधि के लिए सामान्य सुझाव और टूल रखता हूं तो मैं अभी भी उत्सुक हूं।
यह बात आपको JVM आंतरिकों को विज़ुअलाइज़ करने के बारे में कुछ जानकारी दे सकती है: http://www.infoq.com/presentations/Visualizing-Java-GC – sschaef