सिंगलटन अपवाद एक प्रदर्शन के अनुकूलन होने की अपेक्षा की जाती है। सोच यह है कि आप एक अपवाद बनाते समय स्टैक ट्रेस को पॉप्युलेट करने की लागत को खत्म करते हैं जो आमतौर पर अपवादों का सबसे महंगा हिस्सा होता है।
यदि अपवाद पर्याप्त रूप से अद्वितीय और वर्णनात्मक था और स्टैकट्रैक का उपयोग नहीं किया जा रहा था, तो एक सिंगलटन संभावित रूप से प्रभावी हो सकता है। आप ऐप को डिज़ाइन कर सकते हैं कि एक विशिष्ट संदेश के साथ एक विशिष्ट अपवाद प्रकार का अर्थ हमेशा एक विशिष्ट स्थान से एक अपवादित किया जाता है। फिर स्टैक ट्रेस अप्रासंगिक होगा।
April 22, 2003 Tech Tips article एक परिदृश्य में जहाँ आप एक अपवाद का पुन: उपयोग का वर्णन करता है। इस मामले में, वे बनाई गई वस्तुओं की संख्या को कम करके कचरा कलेक्टर खेलने की कोशिश कर रहे हैं। यदि आपने populateStackTrace()
कॉल छोड़ दिया है, तो आपको थ्रेडिंग के बारे में चिंता करने की आवश्यकता नहीं होगी।
आम तौर पर, यदि अपवाद का प्रदर्शन प्रभाव समस्या पैदा कर रहा है, तो यह एक संकेत है कि अपवाद का उपयोग अनुप्रयोग तर्क के लिए किया जा रहा है और इसके बजाय त्रुटि-कोड का उपयोग किया जाना चाहिए।
नए जेवीएम (1.4+, मुझे विश्वास है) में, "-सेवर" मोड में चलते समय यह "अनुकूलन" स्वचालित रूप से JVM द्वारा किया जा सकता है। यह हॉटस्पॉट अनुकूलन -XX:+OmitStackTraceInFastThrow
विकल्प द्वारा नियंत्रित किया जा सकता है।
व्यक्तिगत रूप से, मैं सिंगलटन अपवाद [एंटी-] पैटर्न का उपयोग करने के खिलाफ अनुशंसा करता हूं।
स्रोत
2009-04-17 21:56:37
दिलचस्प जवाब। मैं आपके तीसरे पैराग्राफ से सबसे दृढ़ता से सहमत हूं; अपवाद असाधारण होना चाहिए और यदि वे प्रदर्शन समस्या का कारण बनने के लिए अक्सर गोलीबारी कर रहे हैं, तो आपको अपने कोड पर पुनर्विचार करना होगा। – Randolpho
बहुत ही रोचक जवाब। OmitStackTraceInFastThrow' JVM विकल्प - [+]: –
JVM वास्तव में सिंगलटन RuntimeExceptions (जैसे एनपीई) अगर एक ही स्थान पर कई बार से फेंक दिया जाता है, '-XX द्वारा नियंत्रित फेंकने शुरू कर देंगे। तो अगर कोई आपको एनपीई के साथ लॉग भेजता है और कोई बैकट्रैक नहीं भेजता है, तो हो सकता है कि :) – araqnid