2012-07-19 16 views
5

से अपवाद प्रभावी जावा में अध्याय:कोशिश करने वाले ब्लॉक में कुछ कोड डालने से किस तरह से JVM को ऑप्टिमाइज़ेशन करने से रोका जा सकता है?

एक कोशिश कैच ब्लॉक के अंदर कोड लगाकर कुछ अनुकूलन को रोकता है कि आधुनिक JVM कार्यान्वयन अन्यथा प्रदर्शन कर सकती है

क्यों और कैसे करता है एक कोशिश-पकड़ ब्लॉक JVMs द्वारा अनुकूलन को रोकता है?

+0

[यह प्रश्न] (http://stackoverflow.com/questions/299068/how-slow-are-java-exceptions) सहायक हो सकता है। – Leri

उत्तर

2

कारणों में से एक कारण है कि अपवाद और अपवाद हैंडलिंग असाधारण होने के लिए माना गया है; यानी कोड जिसे शायद ही कभी निष्पादित किया जाता है। यह इस प्रकार है कि अपवाद हैंडलर को अनुकूलित करने पर जेआईटी कंपाइलर द्वारा बिताए गए समय को समग्र प्रदर्शन के लिए थोड़ा लाभ नहीं होगा।

जेआईटी कंपाइलर के अनुकूलक को अनुकूलन की लागत के मुकाबले अनुकूलन के प्रदर्शन लाभों को संतुलित करना है। उत्तरार्द्ध में शामिल हैं:

  • जटिल पूर्व शर्त की जाँच करता है, तो एक अनुकूलन संभव है यह देखने के लिए की लागत,
  • वास्तविक अनुकूलन करने की लागत, और
  • लागत (Oracle करने के लिए) को लागू करने और एक को बनाए रखने के सॉफ़्टवेयर का जटिल टुकड़ा जो अनुकूलन करता है (सामान्य परिस्थितियों/धारणाओं के तहत) प्रभावी नहीं होगा।

वहाँ भी तकनीकी कारणों से है कि अपवाद संचालकों के अनुकूलन को बाधित हो सकता है। उदाहरण के लिए, ऑप्टिमाइज़र के लिए नियंत्रण का प्रवाह कहां से आया था, यह आसान (या यहां तक ​​कि संभव) भी आसान नहीं हो सकता है। इसलिए, ऑप्टिमाइज़ेशन जो यह जानने के आधार पर आधारित है (उदाहरण के लिए रजिस्टरों में कैशिंग सामग्री, सामान्य सबएक्सप्रेस, ...) निष्पादित नहीं किया जा सकता है।

5

जेवीएम कोशिश/पकड़ ब्लॉक के बाहर उन लोगों के साथ प्रयास/पकड़ ब्लॉक के अंदर संचालन को गठबंधन या पुन: क्रमबद्ध नहीं कर सकता है। जटिलता की प्रत्येक परत अनुकूलन को कठिन बनाती है। यदि यह अपेक्षाकृत दुर्लभ मामला है, तो इसे JVM द्वारा नियंत्रित नहीं किया जा सकता है, यदि संदेह में, इष्टतम कोड की बजाय शुद्धता का चयन करें।

+0

क्या आप विस्तृत कर सकते हैं "यदि यह अपेक्षाकृत दुर्लभ मामला है, तो इसे JVM द्वारा नियंत्रित नहीं किया जा सकता है, अगर संदेह में, इष्टतम कोड की बजाय शुद्धता का चयन करें।" । आपका जवाब इस बात का उत्तर देने लगता है, हालांकि मुझे इस बात के बारे में निश्चित नहीं है कि क्यों भाग है। – Geek

+2

क्यों यह एक जटिल स्थिति है और शायद ही कभी उपयोगी है। –

-1

चेक दिए गए लिंक:

How slow are Java exceptions?

मुझे लगता है कि अपवाद जावा वस्तुओं रहे हैं और इन वस्तुओं बनाया जाना चाहिए। ऑब्जेक्ट बनाना एक महंगा ऑपरेशन है। तो केवल त्रुटियों को संभालने के लिए अपवादों का उपयोग करें और प्रवाह को नियंत्रित न करें।