2011-09-06 17 views
5

मैं बाइट कोड उपकरण का उपयोग कर एक प्रोफाइलर महसूस करने के लिए चाहते हैं, तो मैं एक देशी एजेंटJVMTI या मैं एक जावा एजेंटjava.lang.instrument पैकेज का उपयोग लिखना चाहिए का उपयोग कर लिखना चाहिए?बाइट कोड उपकरण - मूल या जावा एजेंट को लागू करें?

यदि मैं ASM जैसे पुस्तकालयों का उपयोग करना चाहता हूं - यदि आप एक गंभीर प्रोफाइलर बनाना चाहते हैं तो अनिवार्य प्रतीत होता है - मुझे जावा एजेंट का उपयोग करना होगा। जो मुझे भ्रमित करता है, क्योंकि मैंने सोचा था कि एक देशी एजेंट सब कुछ कर सकता है जो एक जावा एजेंट कर सकता है और अधिक। लेकिन मेरे लिए, यह एक जावा एजेंट लिखना आसान लगता है।

क्या विकल्प हैं? क्या किसी को जावा एजेंट और देशी एजेंट का उपयोग करना चाहिए?

उत्तर

5

लगभग हर कोई एक जावा एजेंट (एएसएम या बीसीईएल के साथ) लिखता है क्योंकि वे स्क्रैच से सी/सी ++ बाइटकोड उपकरण लिखना नहीं चाहते हैं क्योंकि सार्वजनिक रूप से कोई भी उपलब्ध नहीं है।

आप जो करने में सक्षम नहीं होंगे वह उपकरण और प्रोफाइल/प्रायोगिक JVM की निगरानी करता है, और देशी कार्यों तक पहुंचने के लिए जेएनआई कॉल की आवश्यकता होती है। कई JVMTI कॉल भी हैं जो आपके लिए अनुपलब्ध हो सकती हैं (यदि स्मृति सेवा करता है)।

मैं कई साल पहले सी में अपने ही instrumentor लिखा था, और मैं (मेरी बुराई अधिपतियों के आधार पर :-))

कैसे एक के बारे में एक नया एक है जो मैं स्रोत खोलने के लिए आशा है कि लिखने की प्रक्रिया में हूँ आधा रास्ता घर, एक अलग पूर्व-प्रारंभ जेवीएम है कि आपका मूल एजेंट बाइटकोड भेजता है। उस जेवीएम में एएसएम आधारित उपकरण लिखने के लिए आपकी आसान चोटी कड़ी मेहनत करती है और परिणामी बाइटकोड को तार पर देशी एजेंट को वापस भेजती है। हाँ यह थोड़ा अधिक जटिल लगता है लेकिन यह आसान है कि अपनी खुद की बीसीआई पुस्तकालय लिखना।

+1

प्री-प्रारंभ जेवीएम के साथ आपका क्या मतलब है? क्या इसमें दो जेवीएम शामिल होंगे? एक प्रोफाइलिंग के लिए और एक जो वास्तविक आवेदन चलाता है? देशी एजेंट बाइटकोड क्यों भेजना चाहिए? मैंने सोचा कि यह ऐसा कुछ है जिसे हमें टालना चाहिए। –