2012-04-26 5 views
7

में संकलित किया गया मैं यह सोचते हैं रहा हूँ वहाँ this document स्कीम करने के बाद जावा 1.4 और जावा 6 के बीच विशाल प्रदर्शन अंतर नहीं है होगा।हम अभी भी जावा 6 के प्रदर्शन लाभ अगर बाईटकोड 1.4

मेरा प्रश्न, जावा 6 क्रम अभी भी अपना जादू मिल गया होगा जब बाईटकोड इसे चलाने के लिए है 1.4 में संकलित किया गया था?

"क्यों सवाल?" के लिए कुछ पृष्ठभूमि here है।

उत्तर

9

हाँ, क्योंकि अनुकूलन के सबसे रनटाइम पर JVM द्वारा किया जाता है, संकलक बहुत कम अनुकूलन के संबंध में कर रही है। इस प्रकार पुराने जावा कंपाइलर के साथ संकलित कोड अभी भी नए जेवीएम से लाभान्वित होगा।

हालांकि संकलन समय पर कुछ अनुकूलन प्रदर्शन किए गए हैं, जैसे StringBuilder के साथ निरंतरता को प्रतिस्थापित करना।

+0

हाय टॉमस, उत्तर के लिए धन्यवाद। क्या आपके ऊपर उपरोक्त बताई गई सामग्री पढ़ने के लिए कोई सूचक है? सूर्य या ओरेकल से कुछ अधिकारी बहुत महान होंगे। – bungrudi

+0

@ बंगरुडी: दुर्भाग्य से, यह SO से सिर्फ एक सामान्य ज्ञान है। लेकिन शायद कोई और कठिन संसाधनों को इंगित करेगा? –

+0

+1 न केवल 'javac' संकलक बहुत कम अनुकूलन करते हैं, क्या नहीं जावा 1.4 के बाद से बहुत बदल गया है है। इसके बजाय स्ट्रिंगबिल्डर का उपयोग करना स्ट्रिंगबफर को जावा 5.0 (2004) में जोड़ा गया था लेकिन अंतर आमतौर पर बहुत छोटा होता है। –

1

जावा में लगभग सभी अनुकूलन जिट में होते हैं और इसलिए केवल जेवीएम संस्करण पर निर्भर करते हैं जो एप्लिकेशन चला रहा है। जावैक बाइटकोड कंपाइलर बस सबसे सीधे-आगे बाइटकोड को उत्सर्जित करता है। मुझे नहीं लगता कि इस चरण में कोई अनुकूलन है, शायद StringBuilder/StringBuffer का उपयोग कर स्ट्रिंग कॉन्सटेनेशन के लिए।

जावा 6 और अधिक उपयोग कर सकते हैं एक तेजी से और लक्ष्य संस्करण 6. javac संकलक प्रत्येक ढेर स्लॉट में डेटा प्रकार, जो सत्यापनकर्ता मान्य करने के लिए है के बारे में अतिरिक्त जानकारी के बनाता है के साथ संकलित कक्षाओं के लिए सरल bytecode verifier। पिछले संस्करणों में सत्यापनकर्ता को इन प्रकारों को कम करना था जो अधिक जटिल है। यह परिवर्तन केवल कक्षाओं के लोडिंग को तेज करेगा और वास्तव में बाइटकोड निष्पादित करते समय इसका कोई प्रभाव नहीं होना चाहिए।

मुझे लगता है कि संस्करण 5 या 6 में बाईटकोड के लिए एक और परिवर्तन किया गया है कि वर्ग फ़ाइल में लगातार पूल वर्गों और इंटरफेस संदर्भित कर सकते हैं। फिर, यह शायद कक्षा लोडिंग को प्रभावित करता है।

0

न केवल विशाल प्रदर्शन लाभ होगा, बल्कि जावा 6 संस्करणों के बीच भी बड़े अंतर हैं। मैंने 18 महीने की अवधि में जावा 6 की मामूली रिलीज को ट्रैक किया और उस से 15-20% स्पीडअप देखा।

जावा 7, बाहर है वैसे, और पसंद की उत्पादन संस्करण है - वहाँ एक कारण है कि आप उस संस्करण में जाने के लिए नहीं करना चाहते है?

ओह, और एक आखिरी बात। यदि आपको प्रबंधन में लाभ साबित करने की आवश्यकता है, तो आपको जावा अनुप्रयोगों के प्रदर्शन मापने पर बहुत कुछ पढ़ना चाहिए। मेरे पास ओरेकल की जावा पत्रिका के आगामी मई/जून 2012 अंक में एक लेख है जो आपको वास्तविक 101 है। यह एक बहुत फिसलन विषय है, इसलिए आपको बहुत सी पढ़ाई करनी चाहिए या आपको बहुत भ्रामक संख्या मिल सकती है।

+0

ऐप एक विरासत वेबस्पेयर 6 (जावा 1.4 आधारित) एप्लिकेशन है जिसे हम अब वेबस्पेयर 7 पर माइग्रेट कर रहे हैं। 'बंडल' जेडीके 1.6.0_xx है और हमारे पास इसे बदलने की कोशिश करने के लिए अतिरिक्त समय की लक्जरी नहीं है जावा 7 (कम से कम अभी के लिए)। मैं उत्सुकता से आपके लेख की प्रतीक्षा कर रहा हूं। – bungrudi

2

टोमाज़ Nurkiewicz बताते हैं के रूप में अनुकूलन के सबसे JIT कम्पाइलर द्वारा किया जाता है और आप जावा 1.4 के बजाय जावा 6 पर चलाकर प्रदर्शन लाभ देखना चाहिए। हालांकि, यह गारंटी नहीं देता है कि आप सर्वोत्तम परिणामों को निकाल देंगे। यदि आप डेटा संरचनाओं के धीमे (पुराने) रूपों का उपयोग कर रहे हैं तो भी आप लाभों से चूक सकते हैं। जैसे स्ट्रिंगबिल्डर के बजाय स्ट्रिंगबफर, लिंक्डलिस्ट के बजाय वेक्टर, हैश मैप के बजाए हैशटेबल, और इतने पर ...

आप जावैक के लिए डिप्लेक्टेड ध्वज के साथ संकलन पर भी विचार कर सकते हैं। आप शायद बहिष्कृत विधियों को प्रतिस्थापित करना चाहते हैं क्योंकि उनका आमतौर पर मतलब है कि एक ही चीज़ प्राप्त करने के लिए एक बेहतर प्रदर्शन विकल्प उपलब्ध है।

+0

-deprecated ध्वज पर अच्छा सूचक। इसके लिए +1। – bungrudi

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