2012-05-21 3 views
6

में इंस्ट्रुमेंटेशन का उदाहरण कैसे प्राप्त करें मैं बस ObjectUtils कक्षा लिखने की कोशिश कर रहा हूं जिसमें सभी ऑब्जेक्ट्स के लिए विभिन्न उपयोगिता विधियां हैं। मैं उनमें से एक getObjectSize(Object) कहा जाता है जहां आप इसे एक instantiated ऑब्जेक्ट पारित करना चाहते हैं और यह स्मृति में वस्तु के आकार देता है:जावा

public class ObjectUtils { 
    private static volatile Instrumentation instrumentation; 

    public static final long getObjectSize(final Object p_oToGauge) 
    { 
     return instrumentation.getObjectSize(p_oToGauge); 
    } 
} 

हालांकि, ऐसा लगता है कि आदेश में एक कार्यान्वित Instrumentation उदाहरण प्राप्त करने के लिए, आप की जरूरत है जेआरई एजेंटों और तथाकथित premain विधि के साथ सभी प्रकार की फैंसी चीजें करें।

स्थानीय जेआरई Instrumentation उदाहरणों तक पहुंच प्राप्त करने का कोई आसान तरीका है? मैंने Runtime एपीआई के माध्यम से कुछ खोजा लेकिन कुछ भी नहीं मिला।

+2

मैं _think_ नहीं है। आपको फैंसी सामान करना होगा। –

+0

मैंने इस पोस्ट को एलेक्स स्नैप्स से खोला है जो आपको उपयोगी लगेगा: http://www.codespot.net/blog/2012/01/measuring-java-object-sizes/ –

उत्तर

0

मुझे InstrumentationFactory नामक एक कक्षा मिली।

पहली बार किसी Instrumentation का एक उदाहरण के लिए पूछता है, यह एक एजेंट JAR फ़ाइल बनाता है, तो पाता है अपनी ही प्रक्रिया का पीआईडी ​​और कहा कि ... कौन सा agentmain(..) कॉल अंदर JVM करने के लिए यह देता है, यह Instrumentation दे रही है ब्याज का उदाहरण

मुझे यकीन नहीं है कि दृष्टिकोण कितना विश्वसनीय है। मैं आगे क्या कोशिश करूंगा यह देखने के लिए ओपनजेडीके का कोड खोजना है कि Instrumentation इंस्टेंस कैसे बनाया गया है। शायद, सुरक्षा आवश्यकताओं की अनुपस्थिति में, यह संभव होगा (प्रतिबिंब के माध्यम से) उस तंत्र को Instrumentation उदाहरण प्रस्तुत करने के लिए एजेंट को संलग्न या प्रीलोड किए बिना?