मुझे पता है कि जब एक जावा कंपाइलर एक सामान्य प्रकार संकलित करता है, तो यह टाइप एरर करता है और कोड से जेनेरिक के सभी संदर्भ हटा देता है और मेरा ArrayList<Cheesecake>
केवल ArrayList
बन जाता है।क्या जावा जेनरिक का प्रकार मिरर पूर्ण प्रकार कास्टिंग का कारण बनता है?
प्रश्न यह है कि मुझे एक स्पष्ट उत्तर की आवश्यकता नहीं है, भले ही इस प्रकार की कमी (और इसलिए अनिवार्य प्रकार-कास्टिंग) धीमा हो जाए। शब्दों के क्रम में, यदि मैं मानक जावा कंपाइलर और मानक जेवीएम 1.7 का उपयोग ओरेकल से कर रहा हूं:
- क्या बाइटकोड में एक प्रकार का कास्ट शामिल है?
- यदि हां, तो क्या यह सही प्रकार का जांच करने के लिए रन-टाइम चेक शामिल करता है?
- क्या रूपांतरण स्वयं ही एक छोटी-छोटी अवधि लेता है?
- चाहेंगे बनाने मेरे अपने
CheesecakeList
वर्ग किArrayList
के समान लगता है, बसObject
रों के सभी के साथCheesecake
रों मैं कुछ भी (फिर से बस एक काल्पनिक हासिल होगा करने लगे थे और मैं क्योंकि एक बड़ा बाइनरी होने के कोई साइड इफेक्ट में कोई दिलचस्पी नहीं अधिक कक्षाओं और न ही मेरे कोड में नकल)।
मुझे किसी भी अन्य समस्या में कोई दिलचस्पी नहीं है जो मिटाने के कारण टाइप करती है, जो किसी से बेहतर है जो जेवीएम को बेहतर तरीके से समझता है।
मैं सबसे इस उदाहरण में लागत में दिलचस्पी है:
List<Cheesecake> list = new ArrayList<Cheesecake>();
for (int i = 0; i < list.size(); i++)
{
// I know this gets converted to ((Cheesecake)list.get(i)).at(me)
list.get(i).eat(me);
}
पाश अंदर है कि कलाकारों महंगा और/या महत्वपूर्ण है की तुलना में:
CheesecakeList list = new CheesecakeList();
for (int i = 0; i < list.size(); i++)
{
//where the return of list.get() is a Cheesecake, therefore there is no casting.
list.get(i).eat(me);
}
अस्वीकरण: यह ज्यादातर एक है अकादमिक जिज्ञासा का सवाल। मुझे सच में संदेह है कि टाइप कास्ट के साथ कोई महत्वपूर्ण प्रदर्शन समस्या है और उनके लिए आवश्यकता को हटाने के लिए शीर्ष 5 चीजों में से एक भी नहीं होगा यदि मैं अपने कोड में प्रदर्शन बग मिला। यदि आप इसे पढ़ रहे हैं क्योंकि आपके पास प्रदर्शन समस्या है तो आप एक पक्ष बनाते हैं और एक प्रोफाइलर शुरू करते हैं और पता लगाते हैं कि बोतल की गर्दन कहां है। यदि आप वास्तव में टाइप-कास्टिंग में विश्वास करते हैं, तो केवल तभी आप इसे किसी भी तरह से आजमा सकते हैं और अनुकूलित कर सकते हैं।
* "नीचे पंक्ति: समय से पहले अनुकूलित न करें।" * यह। +1 –
यह एक विशुद्ध रूप से शैक्षणिक प्रश्न था। लेकिन आपकी लाइन कह रही है कि टाइपकास्ट वहां है और जेवीएम उन वास्तव में अच्छी तरह से संभालता है, क्या मैं दो मुख्य चीजें हैं जिन्हें मैं इस प्रश्न से प्राप्त करना चाहता था। –
यह भी ध्यान देने योग्य है कि रनटाइम चेक एक है कि सीपीयू की शाखा भविष्यवाणी बहुत आसानी से संभालने में सक्षम होने जा रही है, जिससे प्रदर्शन में और सुधार होगा। – yshavit