मैं app की स्मृति रिसाव पता लगाने के लिए कोशिश कर रहा है कि क्या यहाँ मैं कुछ संख्यात्मक मान पूर्णांक Shallow heap
और retained heap
स्तंभ पाया। ये मूल्य क्या है, और कैसे पता चलेगा कि स्मृति रिसाव कहां है।एंड्रॉयड: <code>list_object</code> में, <code>MAT</code> द्वारा उथले और बनाए रखा ढेर के बीच मतभेद
उत्तर
:
उथले ढेर आसान है - यह केवल ढेर वस्तु ही के कब्जे के होते हैं। इसकी गणना करने के लिए कुछ बारीकियां हैं, लेकिन इस आलेख के दायरे के लिए हम इसे छोड़ देते हैं। उसी विषय पर भविष्य में पोस्ट के लिए बने रहें।
बनाए रखा ढेर कई मायनों में और अधिक रोचक है। शायद ही कोई आप उथले ढेर में रुचि रखते हैं, ज्यादातर मामलों में अपने वास्तविक प्रश्न को "अगर मैं स्मृति, कैसे अधिक स्मृति अब कचरा कलेक्टर द्वारा मुक्त किया जा सकता से इस वस्तु को दूर" अनुवाद किया जा सकता।
1) कुछ वस्तुओं जो जीसी द्वारा "महत्वपूर्ण" माना जाता है के होते हैं:
अब, जैसा कि हम सभी को याद है, सभी जावा कचरा संग्रहण (जीसी) एल्गोरिदम इस तर्क का पालन । इन्हें जीसी जड़ों कहा जाता है और (लगभग) कभी नहीं छोड़े जाते हैं। वे कर रहे हैं, उदाहरण के लिए , वर्तमान में मूल कोड और समान "वैश्विक" वस्तुओं से विधि के स्थानीय चर और इनपुट मापदंडों आवेदन धागे, संदर्भ को क्रियान्वित।
2) उन जीसी जड़ों से संदर्भित किसी भी वस्तु को उपयोग में माना जाता है और इसलिए जीसी द्वारा त्याग दिया नहीं जाता है। एक वस्तु जावा में अलग अलग तरीकों से एक और संदर्भित कर सकते हैं सबसे सामान्य रूप में एक वस्तु एक एक वस्तु बी ऐसे मामले में की एक क्षेत्र में संग्रहीत किया जाता है, हम कहते हैं कि "बी संदर्भ ए '।
3) प्रक्रिया को दोहराया जाता है जब तक कि सभी वस्तुओं को पारगमनशील रूप से जीसी जड़ों से प्राप्त नहीं किया जाता है और "उपयोग में" के रूप में चिह्नित किया जाता है।
4) बाकी सब कुछ अप्रयुक्त है और फेंक दिया जा सकता है।
सरल शब्दों में एक वस्तु का उथला ढेर ढेर में इसका आकार है और बनाए रखा एक ही वस्तु के आकार ढेर स्मृति की मात्रा जब वस्तु कचरा एकत्र है कि मुक्त हो जाएगा है। More Details
From eclipse memory analyser docs
उथला बनाम बनाए रखा ढेर
उथला ढेर स्मृति एक वस्तु द्वारा खपत है। एक वस्तु संदर्भ प्रति 32 या 64 बिट्स (ओएस वास्तुकला के आधार पर), 4 बाइट पूर्णांक प्रति, लांग, आदि प्रति 8 बाइट्स हीप डंप प्रारूप के आधार पर आकार समायोजित किया जा सकता है (जैसे, आदि से 8 गठबंधन की जरूरत है ...) वीएम की वास्तविक खपत बेहतर मॉडल करने के लिए।
एक्स के बनाए गए सेट ऑब्जेक्ट्स का सेट है जिसे जीसी द्वारा हटाया जाएगा जब एक्स कचरा एकत्र होता है।
बनाए रखा ढेर एक्स के यानी में सभी वस्तुओं के उथले आकारों का योग एक्स के सेट को बरकरार रखा, स्मृति एक्स द्वारा जीवित रखा है
सामान्य शब्दों में, एक वस्तु के उथले ढेर में इसका आकार है ढेर और एक ही वस्तु के बनाए रखा आकार ढेर स्मृति की मात्रा है कि जब वस्तु कचरा एकत्र है मुक्त हो जाएगा है।
ऐसे एक विशेष वर्ग की सभी वस्तुओं या एक विशेष वर्ग लोडर या बस मनमाने ढंग से वस्तुओं का एक समूह द्वारा लोड सभी वर्गों के सभी वस्तुओं के रूप में वस्तुओं, के एक प्रमुख सेट के लिए सेट को बरकरार रखा, वस्तुओं की सेट है यह जारी किया जाता है यदि उस अग्रणी सेट की सभी ऑब्जेक्ट अनुपलब्ध हो जाती हैं। बनाए रखा सेट में इन ऑब्जेक्ट्स के साथ-साथ शामिल हैं क्योंकि इन सभी ऑब्जेक्ट्स केवल इन ऑब्जेक्ट्स के माध्यम से सुलभ हैं। बनाए रखा आकार में निहित सभी वस्तुओं के कुल ढेर आकार सेट बनाए रखा है।
न्यूनतम बनाए रखा आकार बनाए रखा आकार जो तरीके तेजी से सटीक तुलना में गणना की जाती है वस्तुओं का एक सेट की आकार को बनाए रखा का एक अच्छा (नीचे) आकलन देता है। यह केवल में वस्तुओं की संख्या पर निर्भर करता है, ढेर डंप में वस्तुओं की संख्या नहीं।
जिज्ञासु क्या एक और तरीका है एक वस्तु से क्षेत्र में संग्रहित किया जाना एक और अन्य को संदर्भित कर सकते है? – marekdef
@marekdef यहां पूछने से परेशान मत हो। [मूल लेखक के ब्लॉग] पर टिप्पणी की कोशिश करो (https://plumbr.eu/blog/how-much-memory-what-is-retained-heap)। – Gilles