एक मायने में, GC_FOR_ALLOC
GC_CONCURRENT
से अधिक गंभीर है, क्योंकि GC_FOR_ALLOC
का मतलब है कि पर्याप्त आवंटन अनुरोध को पूरा करने स्मृति नहीं थे, इसलिए एक कचरा संग्रहण, जरूरी हो गया था, जबकि GC_CONCURRENT
बस का अर्थ है कि जी सी, चल रहा तरह महसूस आम तौर पर क्योंकि है आवंटन के बाद मुफ्त मेमोरी की मात्रा निश्चित सीमा से कम हो गई।
Android पर जीसी के एक और अधिक गंभीर प्रकार GC_BEFORE_OOM
जो जब आवंटन अनुरोध GC_FOR_ALLOC
के बाद भी विफल रहता है और जब आवेदन ढेर बड़ा के रूप में बड़ा हो गया है के रूप में यह होना करने के लिए अनुमति दी है किया जाता है है। जब ऐसा होता है, आखिरी उपाय के रूप में, डाल्विक स्मृति को आवंटित करने के अंतिम प्रयास करने से पहले सॉफ़्ट रेफरेंस जारी करने का प्रयास करेंगे और यदि यह आउटऑफमेमरी अपवाद फेंकने में विफल रहता है।
आप इस तर्क के लिए कोड को देखने के लिए उत्सुक हैं, तो यह tryMalloc()
में dalvik.git/vm/alloc/Heap.cpp
में वैसे भी है, यदि आप कोई आपत्ति नहीं है, मुझे शक है कि logcat उत्पादन को देख करने के लिए सबसे कारगर तरीका है अपने कचरा संग्रह समस्याओं को डीबग करें। मुझे नहीं पता कि आपके पास कौन सी विशिष्ट समस्या है, लेकिन क्या आपने डीडीएमएस में आवंटन ट्रैकर जैसे टूल में देखा है और hprof-conv
उपकरण की मदद से हीप डंप का विश्लेषण किया है? (http://android-developers.blogspot.se/2011/03/memory-analysis-for-android.html देखें उदाहरण के लिए।)
स्रोत
2012-07-03 13:36:23
क्या आपने http://stackoverflow.com/questions/895444/java-garbage-collection-log-messages पढ़ा है? स्वीकार्य उत्तर में उल्लिखित लिंक आपको – kommradHomer
@kommradHomer प्रतिक्रिया के लिए धन्यवाद दे सकता है लेकिन मुझे नहीं लगता कि यह यहां लागू होता है क्योंकि यह दल्विक आभासी मशीन है जो जीसी स्वीप कर रही है। मुझे अभी भी एक जानकारीपूर्ण होने का लिंक मिला है, अगर घना, पढ़ा जाए। –