2011-09-21 18 views
5

कृपया, क्या कोई तरीका है कि वस्तुओं का इतिहास कैसे प्राप्त करें (उनके चर या कम से कम वर्ग के नाम) जो कि जावा में एकत्रित कचरा है?जावा में एकत्रित कचरा किस वस्तु को देखा गया है?

बस (Oracle JVM करने के लिए) इन पैरामीटर

-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps 

बाइट में कुछ और स्मृति प्रदान नहीं करता है जोड़ने। यह मेरे लिए बहुत सीमित सहायता है। सभी प्रतिक्रियाओं के लिए धन्यवाद।

नोट: जोड़ने के साथ वर्कअराउंड() विधि दुर्भाग्य से मेरे लिए एक विकल्प नहीं है (मुझे इसकी पहुंच नहीं है)।

उत्तर

3

अस्वीकरण: मेरी कंपनी उस टूल को विकसित करती है जिसे मैं इस उत्तर में अनुशंसा करता हूं।

JProfiler में आप मेमोरी सेक्शन में "रिकॉर्ड किए गए ऑब्जेक्ट्स" दृश्य पर जा सकते हैं और एकत्रित ऑब्जेक्ट्स को कचरा मोड में बदल सकते हैं (देखें-> बदलें लाइनेस मोड-> कचरा एकत्रित ऑब्जेक्ट्स)। फिर आप उन वस्तुओं के आंकड़े देखेंगे जिन्हें जीसीड किया गया है।

enter image description here

+1

धन्यवाद। जेपीरोफाइलर शानदार दिखता है लेकिन 450 € बहुत महंगा है –

+0

क्या कक्षाओं को प्रोग्रामेटिक रूप से सूचीबद्ध करने का कोई तरीका है? मैं java.lang.Management पैकेज के माध्यम से जा रहा था, लेकिन यह केवल गिनती वापस कर सकते हैं। – meexplorer

+0

आपका मतलब जेपीरोफेलर में या जेडीके एमबीन में है? –

3

आप Object से finalize विधि का उपयोग कर सकते हैं। इस विधि को तब कहा जाता है जब वस्तु जीसीड होने वाली है। यहां से, आप जिस जानकारी की आवश्यकता है उसे लॉग कर सकते हैं।

0

क्या आप मेमोरी लीक खोज रहे हैं?

यदि आप finalize() विधि (प्रत्येक Object में उपलब्ध) लागू करते हैं तो ऑब्जेक्ट कचरा एकत्र होने से ठीक पहले इसे कॉल किया जाएगा - और आप इसके अंदर कोई भी कोड चला सकते हैं।

यदि आप एक व्यवस्थित समाधान की तलाश में हैं (या आपके पास उन कक्षाओं तक पहुंच नहीं है जिन्हें आप मॉनीटर करना चाहते हैं), तो मुझे किसी भी JVM विकल्प से अवगत नहीं है जो इसकी अनुमति देता है। हालांकि आप लॉग वर्ग लोड और अनलोड (जीसीड) हो सकते हैं, लेकिन यह वह नहीं है जो आप पूछ रहे हैं।

-2

क्रम में JVM के अवलोकन के लिए JDK में एक अच्छा निर्मित उपकरण नहीं है। यह jvisualvm है। http://visualvm.java.net/description.html

यहाँ उनमें से एक है: enter image description here

आशा है कि मदद करता है वहाँ एक स्क्रीनशॉट के साथ एक अच्छा संदर्भ है।

+1

jprofiler एक बहुत ही शक्तिशाली और सामान्य प्रयुक्त उपकरण है लेकिन यह केवल ओपनसोर्स के लिए स्वतंत्र है और एकल उदाहरण के लिए मानक लाइसेंस वास्तविक धन - $ 500 है। यह कुछ परियोजनाओं के लिए एक समस्या हो सकती है। – BrownFurSeal

+1

मैं VisualVM का उपयोग और उपयोग करता हूं लेकिन यह कचरा एकत्रित वस्तुओं को देखने का समर्थन नहीं करता है। –

+0

यह एक उपयोगी उपकरण है, लेकिन यह इस विशेष आवश्यकता का उत्तर नहीं देता है। –

0

Weak references या phantom references ऑब्जेक्ट वास्तव में हटा दिए जाने पर लॉग इन करने के लिए उपयोगी प्रतीत होता है। this article में तकनीक समझाया गया है।

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