2010-03-08 18 views
6

बाइटकोड की जांच, मैंने देखा है कि जावा प्रकार सरणी प्रकारों को कास्ट करते समय 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 एक अपवाद को बढ़ाने के लिए माना जाता है अगर वस्तु नहीं माना जा सकता अनुरोधित प्रकार के रूप में और अन्यथा कुछ भी नहीं करता है, इसलिए मुझे नहीं पता कि यह कास्ट को दोगुना करने में क्यों मदद कर सकता है। मैंने जेडीके स्रोतों को यह देखने के लिए नहीं देखा है कि यह कैसे बनाया गया है, और यदि यह समझाने में मदद करता है कि क्यों (शायद यह एक संकेत के रूप में है)।

+1

दिलचस्प ... कहीं और चर्चा की गई: http://mail-archive.ow2.org/asm/2007-07/msg00034.html – polygenelubricants

उत्तर

8

यह जावैक का known bug है। लेकिन यह ज्यादातर हानिरहित है।

+0

संदर्भ के लिए धन्यवाद। मेरी खोज विफल रही। – Brandon

+0

आपको लगता है कि यह तय हो जाएगा, इसे ठीक करना कितना मुश्किल हो सकता है! –