memory management हैलो वर्ल्ड एंड्रॉइड एपीपी के लिए अप्रत्याशित हीप डंप




memory-management memory-leaks (2)

मैं ग्रहण में MAT का उपयोग कर मेमोरी उपयोग के बारे में सीख रहा हूं। हालांकि मैं एक अजीब समस्या में भाग गया है। भारी ऐप्स को छोड़ दें, मैंने सबसे सौम्य "हैलो वर्ल्ड" ऐप के साथ शुरू किया। यह है जो मुझे नेक्सस 5, एआरटी रनटाइम, लॉलीपॉप 5.0.1 पर हीप आंकड़े के रूप में मिलता है

आईडी : 1
हीप आकार : 25.429 एमबी
आवंटित : 15.257 एमबी
निशुल्क : 10.172 एमबी
% प्रयुक्त : 60%
# ऑब्जेक्ट्स : 43487

मेरा हीप डंप मुझे 3 मेमोरी लीक संदिग्ध देता है: अवलोकन

"कम प्रतिष्ठा के कारण पाई चार्ट पोस्ट नहीं कर सकता।"

समस्या संदिग्ध 1

वर्ग "android.content.res.Resources", "" द्वारा लोड किया गया, 10,166,936 (38.00%) बाइट्स पर कब्जा करता है। स्मृति "android.util.LongSparseArray []" के एक उदाहरण में जमा होती है ""।

कीवर्ड android.util.LongSparseArray [] android.content.res.Resources

समस्या संदेह 2

"एंड्रॉइड.graphics.NinePatch" के 20 9 उदाहरण, 5,679,088 (21.22%) बाइट्स पर कब्जा कर लिया गया है। इन उदाहरणों को "java.lang.Object []" के एक उदाहरण से संदर्भित किया गया है, जो कीवर्ड java.lang.Object [] android.graphics.NinePatch द्वारा लोड किया गया है।

समस्या संदेह 3

"Java.lang.reflect.ArtMethod []" के 8 उदाहरण, 3,630,376 (13.57%) बाइट्स पर कब्जा कर लिया गया है। सबसे बड़ा उदाहरण: • java.lang.reflect.ArtMethod [62114] @ 0x70b19178 - 1,888,776 (7.06%) बाइट्स। • java.lang.reflect.ArtMethod [21798] @ 0x706f5a78 - 782,800 (2.93%) बाइट्स। • java.lang.reflect.ArtMethod [24079] @ 0x70a9db88 - 546,976 (2.04%) बाइट्स। कीवर्ड java.lang.reflect.ArtMethod []

यह सब एक साधारण कोड से है:

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

}

प्रशन

  1. ढेर संख्या इतनी बड़ी क्यों हैं। ? एक साइड नोट के रूप में ऐप सिस्टम में 52 एमबी रैम का उपभोग कर रहा था।
  2. निनपैच के इन 20 9 उदाहरण कहां आ रहे हैं? मैंने ग्रहण में "एक नई परियोजना बनाएं" करके केवल परियोजना बनाई है?
  3. संसाधनों का पहला रिसाव संदिग्ध, यह ऐप्स के मेरे विश्लेषण में हर समय आता है। क्या यह वास्तव में एक संदिग्ध है?
  4. ArtMethod क्या है? क्या इसे एआरटी रनटाइम के साथ कुछ करना है?

कल मुझे भी इस समस्या का सामना करना पड़ रहा है। आपके लॉग कुंजी शब्द में "नौपैच" है। मेरे मामले में कारण एक "नकली" छाया थी - अल्फा चैनल के साथ छोटी तस्वीर जो संसाधन रिसाव को ट्रिगर करती है। मेरे लिए 60 एमबी लीक मेमोरी की लागत है।


लॉलीपॉप में डिफ़ॉल्ट रनटाइम एआरटी यानी एंड्रॉइड रन टाइम है। जिसे डाल्विक रन टाइम के स्थान पर उपयोग किया जाता है, पुराने एंड्रॉइड संस्करणों में उपयोग किया जाता है। किटकैट Google ने उपयोगकर्ताओं से फीडबैक प्राप्त करने के लिए एआरटी के प्रयोगात्मक संस्करण को जारी किया। दाल्विक जेआईटी (बस समय संकलन में) का उपयोग किया जाता है, इसका मतलब है कि जब आप एप्लिकेशन खोलते हैं तो केवल डीईएक्स कोड ऑब्जेक्ट कोड में परिवर्तित हो जाता है। लेकिन स्थापना के समय एआरटी में केवल डीएक्स कोड ऑब्जेक्ट कोड में परिवर्तित हो जाता है (यानी समय संकलन से पहले एओटी)। इस ऑब्जेक्ट कोड का आकार डीएक्स कोड की तुलना में अधिक है इसलिए एआरटी को दलविक की तुलना में अधिक रैम की आवश्यकता है, क्योंकि इसके एओटी आवेदन दलविक की तुलना में एआरटी में तेजी से काम करते हैं।





heap-memory