बाइटकोड की जांच, मैंने देखा है कि जावा प्रकार सरणी प्रकारों को कास्ट करते समय checkcast
निर्देशों को डुप्लिकेट करने लगता है। javac संकलित संस्करण काजैवैक चेककास्ट सरणी दो बार क्यों करता है?
Cast.java:
class Cast {
void test(Object a) {
Object[] b = (Object[])b;
}
}
javap disassembly
void test(java.lang.Object);
Code:
0: aload_1
1: checkcast #2; //class "[Ljava/lang/Object;"
4: checkcast #2; //class "[Ljava/lang/Object;"
7: astore_2
8: return
परीक्षण jikes उम्मीद एकल कलाकारों से पता चलता
void test(java.lang.Object);
Code:
0: aload_1
1: checkcast #10; //class "[Ljava/lang/Object;"
4: astore_2
5: return
checkcast
एक अपवाद को बढ़ाने के लिए माना जाता है अगर वस्तु नहीं माना जा सकता अनुरोधित प्रकार के रूप में और अन्यथा कुछ भी नहीं करता है, इसलिए मुझे नहीं पता कि यह कास्ट को दोगुना करने में क्यों मदद कर सकता है। मैंने जेडीके स्रोतों को यह देखने के लिए नहीं देखा है कि यह कैसे बनाया गया है, और यदि यह समझाने में मदद करता है कि क्यों (शायद यह एक संकेत के रूप में है)।
दिलचस्प ... कहीं और चर्चा की गई: http://mail-archive.ow2.org/asm/2007-07/msg00034.html – polygenelubricants