2009-06-03 19 views
14

जैसा कि आप सभी जानते हैं, जावा कोड संकलित और जेवीएम द्वारा व्याख्या किया गया है। मेरे प्रश्न अनुकूलन के साथ सौदा करते हैं: क्या यह केवल JVM द्वारा या संकलन-समय पर रन-टाइम पर अनुकूलित किया गया है?कुशल जावा कोड कैसे लिखें?

कुशल कोड लिखने के लिए, मुझे समर्थित अनुकूलन की सूची कहां मिल सकती है? या जेवीएम ऑप्टिमाइज़ेशन इतने शक्तिशाली हैं कि मुझे बस कोड लिखना पड़ेगा जो गतिशील प्रदर्शन के बावजूद पढ़ने योग्य और बनाए रखने में आसान है?

उत्तर

30

अधिकांश अनुकूलन JVM द्वारा किया जाता है। संकलन-समय की तुलना में जेआईटी स्तर पर ऑप्टिमाइज़ेशन के लिए आम तौर पर अधिक संभावनाएं होती हैं। ("ऑप्टिमाइज़" ध्वज वास्तव में javac से बाहर निकाला गया था, क्योंकि यह पता चला कि कुछ "अनुकूलन" वास्तव में असली दुनिया में प्रदर्शन को नुकसान पहुंचाते हैं।)

सामान्य रूप से (और यह कई भाषाओं/प्लेटफॉर्म पर लागू होता है, न केवल जावा):

  • जितना संभव हो सके पठनीय और रखरखाव योग्य कोड लिखें।
  • प्रदर्शन लक्ष्य और बेंचमार्क हैं ताकि आप हमेशा प्रदर्शन
  • अपना आर्किटेक्चर निष्पादन करने में प्रयास करें; बाद में इसे बदलना मुश्किल है (बदलते कार्यान्वयन की तुलना में)
  • "इसे 10% तेज बनाने" की तुलना में एल्गोरिदम की जटिलता के संदर्भ में प्रदर्शन के बारे में सोचें: ओ (एन^2) से ओ (एन) में परिवर्तन (आम तौर पर) बहुत अधिक महत्वपूर्ण है। (यह वास्तविक दुनिया के उपयोग के बारे में बहुत अधिक निर्भर करता है - यदि आप केवल n के छोटे मूल्यों से निपटने जा रहे हैं, तो "सैद्धांतिक रूप से बेहतर" एल्गोरिदम निरंतर कारकों के कारण धीमे होने से आसानी से समाप्त हो सकता है।)
  • निर्धारित करने के लिए जहां अपने बाधाओं
  • केवल पठनीयता की कीमत पर सूक्ष्म अनुकूलन कर रहे हैं जब प्रोफाइलर चलता है कि यह इस तरह के एक अनुकूलन के बाद
  • उपाय कर रही लायक है एक प्रोफाइलर का प्रयोग करें - आप ज्यादा प्रभाव वास्तव में था नहीं हो सकता है, इस स्थिति में रोल वापस
+2

सूर्य जेवीएम का उपयोग कर प्रारंभिक प्रोफाइलिंग के लिए, "jvisualvm" का उपयोग करें। यह NetBeans प्रोफाइलर का एक स्टैंडअलोन संस्करण है जो एक चल रही प्रोसेस से जुड़ा हो सकता है। –

+0

(ग्रहण के लिए एक VisualVM लॉन्चर प्लगइन है।) –

4

मैं निश्चित रूप से अनुमानित अनुकूलन पर पठनीयता और रखरखाव के लिए लेखन कोड चुनना चाहता हूं।

समयपूर्व अनुकूलन को आम तौर पर बुरी चीज के रूप में देखा जाता है। http://en.wikipedia.org/wiki/Optimization_(computer_science)#When_to_optimize

बेशक, प्रोफाइलिंग टूल के साथ बाधाओं को मापना और साबित करना एक और मामला है। यदि आप ऐसा करते हैं और साबित कर सकते हैं कि ऐसे क्षेत्र हैं जिन्हें अनुकूलित करने की आवश्यकता है और फिर आप आगे बढ़ने वाले लाभों को माप सकते हैं और ऑप्टिमाइज़ कर सकते हैं।

5

जावा हॉटस्पॉट जेआईटी कंपाइलर "हॉटस्पॉट" का पता लगा सकता है और अनुकूली रूप से संशोधित कर सकता है निष्पादन कोड ताकि यह बेहतर perfomance प्रदान करता है। इसके बारे में here पढ़ें।

दूसरी तरफ, यदि आप कोड लिखना चाहते हैं जो प्रारंभ करने में सक्षम है, तो रॉबर्ट सिमन्स द्वारा "Hardcore Java" या "Java Concurrency in Practice" जैसी पुस्तकें ब्रायन गोएट्ज़ द्वारा पढ़ें।

+0

यह "हार्डकोर जावा" है, न कि "हार्डकोड जावा" – Kai

3

क्या यह केवल JVM द्वारा या संकलन-समय पर रन-टाइम पर अनुकूलित किया गया है?

Java संकलन आम तौर पर, (अलग compund शाब्दिक को हल करने से) बहुत कम अनुकूलन कर के बाद से "अनुकूलित" बाईटकोड अनुकूलन करने के लिए JIT कम्पाइलर की क्षमता में बाधा कर सकते हैं - और है कि जहां यह वास्तव में मायने रखती है।

या JVM अनुकूलन शक्तिशाली पर्याप्त ताकि मैं सिर्फ कोड कि को पठनीय और आसान है गति प्रदर्शन की परवाह किए बिना बनाए रखने लिखने के लिए कर रहे हैं?

यह JVM में भरोसा करने से बेहतर आप करते हैं (हालांकि यह निश्चित रूप से एक कारक है) का अनुकूलन करने का सवाल नहीं है, यह अनुकूलन पूरी तरह से अप्रासंगिक कुछ समय के 95% का सवाल है, के बाद से कोड निष्पादित नहीं किया गया है बार बार। यदि कोड का एक टुकड़ा आपके ऐप के निष्पादन समय के 0.1% के लिए खाता है, तो यह केवल परेशान करने योग्य नहीं है। यहां तक ​​कि यदि आप इसे 100 बार बढ़ा सकते हैं, तो यह आपको कुछ भी हासिल नहीं करता है। और यह सबसे आम मामला है।

जब तक आप स्पष्ट रूप से बेवकूफ चीजों से बचते हैं, तब तक आपको अनुकूलन समस्या को तब तक भूलना चाहिए जब तक कि आपके पास ठोस प्रदर्शन समस्या न हो, और उसके बाद केवल कोड के टुकड़े अनुकूलित करें जो एक प्रोफाइलर आपको बताता है कि आप अपने कोड में हॉट स्पॉट हैं।

0

विशिष्ट जेवीएम अनुकूलन के बारे में चिंता न करें। वे विवरण संस्करण से संस्करण में बदल जाते हैं।

जोश ब्लोच से "प्रभावी जावा" पुस्तक खरीदें - यह इस विषय पर सबसे अच्छी किताब है।

+0

अरे, sdiz, आपको यहां देखकर अच्छा लगा। :) – Bombe

1

हालांकि ये सुझाव Google एंड्रॉइड के विशिष्ट जावा कार्यान्वयन के लिए हैं, मुझे लगता है कि these Google Android performance tips "सामान्य" जेवीएम में भी लागू होता है। ध्यान दें कि एंड्रॉइड का जावा रनटाइम पर कोड को अनुकूलित नहीं करता है, जहां तक ​​मुझे पता है।

-1

जेवीएम ऑप्टिमाइज़ेशन संस्करण से संस्करण में बदल जाता है।

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