में एएसएम का उपयोग कर ऑब्जेक्ट क्रिएशन क्रिएशन I जावा में ऑब्जेक्ट सृजन की निगरानी के लिए एएसएम का उपयोग कर रहा हूं। वर्तमान में, मैं कॉल init करने के लिए एक नई वस्तु और साधन एक कार्यक्रम के निर्माण के संकेत के रूप में सेजावा
invoke XXX.init
dup;
invoke XXX.init;
call_my_method(Object)
मेरा विचार करने के लिए ले जाता है newObjectReference की एक प्रति नकल करने और , इस ऑब्जेक्ट के init के बाद, मैं इस ऑब्जेक्ट को रखने के लिए अपनी विधि को कॉल करता हूं।
java.lang.VerifyError, Expecting to find unitialized object on stack.
जब मैं इस्तेमाल किया "-noverify" विकल्प, रनटाइम के दौरान, अगर वहाँ एक धागा उदाहरण है, एक दूसरे अपवाद:
Exception in thread "main" java.lang.IllegalThreadStateException
at java.lang.Thread.start(Unknown Source)
at test.ThreadTest.test
हालांकि, रनटाइम के दौरान, वहाँ एक अपवाद है
दूसरे मामले के लिए, मुझे यकीन है कि मूल प्रोग्राम में छोड़कर () शुरू करने के लिए कोई कॉल नहीं है।
क्या नया ऑब्जेक्ट निर्माण की निगरानी करने का कोई बेहतर तरीका है?
बहुत बहुत धन्यवाद।
मुझे लगता है कि आप आवंटन की निगरानी के लिए मेमोरी प्रोफाइलर का उपयोग नहीं कर सकते हैं। एक बार आपके पास यह डेटा हो जाने के बाद आपको इसे देखने का एक तरीका भी चाहिए। जैसे http://www.yourkit.com/docs/11/help/allocations.jsp –
क्या आप 'call_my_method (ऑब्जेक्ट)' के लिए उपयोग कर रहे सटीक बाइटकोड निर्देश प्रदान कर सकते हैं? – vijay
टिप्पणियों के लिए धन्यवाद। मैंने भूल की। मैंने माना है कि 'init' का एकमात्र तर्क नव निर्मित वस्तु है, इसलिए 'डुप्ली' का उपयोग करके 'init' के बाद इस ऑब्जेक्ट पर जा सकता है। हालांकि, मैंने पाया कि, 'init' से ठीक पहले, कुछ अन्य ऑब्जेक्ट हो सकता है जो कि नव निर्मित वस्तु को 'प्रारंभ करने' के लिए उपयोग किया जाने वाला तर्क है। यही कारण है कि मैं दो अपवादों से ऊपर था।इसे 'थ्रेड टी = नया थ्रेड (नया ARunnableClass())' या अन्य समान ऑब्जेक्ट निर्माण विधियों के बाइटकोड में सत्यापित किया जा सकता है। ऑब्जेक्ट सृजन की निगरानी करने के लिए मुझे कुछ वैकल्पिक तरीकों की आवश्यकता है। –