2012-06-18 9 views
5

मेरे पास एक कक्षा है और मैं देखना चाहता हूं कि इस वर्ग से ऑब्जेक्ट को क्रमबद्ध करने पर कौन सी उप-वस्तुएं सबसे अधिक स्थान पर हैं। कोड को देखने और इसे मैन्युअल रूप से विश्लेषण करने के अलावा, ऐसा करने के लिए कोई अच्छा टूल/तरीका है?जावा - धारावाहिक वस्तु की संरचना का निरीक्षण करने का आसान तरीका?

उदाहरण के लिए मैं यह कहूंगा कि "सदस्य एक 20% पर कब्जा कर लेता है, बी 30% और सदस्य सी 50% पर कब्जा करता है"।

धन्यवाद

पीएस मुझे कुछ संबंधित प्रश्न मिले, लेकिन वहां मेरे विशिष्ट प्रश्न का उत्तर नहीं मिला।

+0

संभवतः संबंधित पर उल्लेख किया: (http://marxsoftware.blogspot.com/2011/12/estimating-java-object-sizes-with [इंस्ट्रूमेंटेशन के साथ आकलन जावा वस्तु आकार] .html) – npe

+0

# alexey28 पर मेरी टिप्पणी देखें - मुझे धारावाहिक वस्तु की संरचना में रूचि है, स्मृति में ऑब्जेक्ट की संरचना नहीं – duduamar

+1

जावा में कोई 'उप-ऑब्जेक्ट' नहीं है। और यह एक अर्थपूर्ण मुद्दा नहीं है। यदि किसी ऑब्जेक्ट के दो सदस्यों के पास आम सदस्य हैं तो आप शेयर को कैसे गिनते हैं? – aalku

उत्तर

-1

ठीक है, मैंने इस तरह के टूल के बारे में कभी नहीं सुना है। लेकिन मुझे लगता है कि स्मृति और क्रमबद्ध ऑब्जेक्ट आकार में ऑब्जेक्ट आकार के बीच कुछ संबंध है। तो आप एक प्रोफाइलर का उपयोग करने का प्रयास कर सकते हैं: VisualVM, जो जेडीके या मेरे पसंदीदा YourKit Profiler में शामिल है।

+1

कुछ संबंध हैं लेकिन मजबूत संबंध नहीं - वर्ग कुछ सदस्यों को क्रमबद्ध करने का विकल्प चुन सकता है, और दूसरों को त्याग सकता है। यह पूरी तरह से तस्वीर बदल सकता है ... – duduamar

+0

कुछ अन्य उत्तरों के लिए रास्ता देता है। अगर कोई ऐसा उपकरण नहीं जानता है और आपको सटीक माप की आवश्यकता है - आपको इसे करने के लिए अपना खुद का लिखना होगा। – alexey28

1

ऑब्जेक्ट के आकार को गिनने का एकमात्र अपेक्षाकृत तेज़ तरीका सबसे पहले ऑब्जेक्ट लिखना है, उपयोग की गणना करें (उदाहरण के लिए, बाइटएरे ऑटपुटस्ट्रीम पर लिखें) और फिर प्रत्येक ऑब्जेक्ट को लिखें जिसे संदर्भित किया गया है।

इस के एक जोड़े को ध्यान में रखना हैं:

  • ObjectOutputStream कुछ कैशिंग कर एक सरल सूचक के साथ एक पहले से लिखा वस्तु का उल्लेख करने में सक्षम होना है। इस कैश को साफ़ करने के लिए रीसेट() विधि का प्रयोग करें।
  • लिखा गया प्रत्येक नया ऑब्जेक्ट प्रकार, पहले कक्षा का विवरण है। इसका ओवरहेड उसी प्रकार की ऑब्जेक्ट्स की संख्या पर निर्भर करता है जिसका आप उल्लेख कर रहे हैं।
  • ऑब्जेक्टऑटपुटस्ट्रीम प्रारंभ करने के लिए एक (छोटा, 4-बाइट) ओवरहेड है।

प्रोटोकॉल के विवरण के लिए, this description पढ़ें।

+0

जिस तरह से मैंने ऐसा करने का विचार किया, जब तक कि मुझे एक बेहतर जवाब नहीं मिलेगा, यह वही तरीका होगा। धन्यवाद। – duduamar

संबंधित मुद्दे

 संबंधित मुद्दे