2012-04-24 5 views
7

अब सप्ताह के लिए एक Android एप्लिकेशन का विकास और मैं सिर्फ महसूस किया कि मैं catlog में इस तरह के संदेश मिल गया:जिट: 512 से 1024 तक जिटटेबल का आकार बदलना और इसी तरह .... यह क्या है?

Jit: Resizing JitTable from 512 to 1024 
(...) 
Jit: Resizing JitTable from 1024 to 2048 
(...) 
Jit: Resizing JitTable from 2048 to 4096 

इसका क्या मतलब है? क्या यह एक स्मृति रिसाव है या ऐसा कुछ है?

और मैं भी (...) क्षेत्र में यह मिल गया: 14% मुक्त पर

04-24 07:59:53.131: D/dalvikvm(874): GC_EXTERNAL_ALLOC freed 207K, 48% free 2980K/5639K, external 1448K/1458K, paused 66ms 
04-24 07:59:57.591: D/dalvikvm(874): GC_CONCURRENT freed 162K, 46% free 3122K/5767K, external 1371K/1673K, paused 11ms+17ms 
04-24 07:59:58.771: D/dalvikvm(874): GC_CONCURRENT freed 196K, 44% free 3445K/6087K, external 1145K/1657K, paused 10ms+6ms 
04-24 08:00:01.411: D/dalvikvm(874): GC_CONCURRENT freed 274K, 39% free 4267K/6983K, external 1145K/1657K, paused 6ms+7ms 
04-24 08:00:04.970: D/dalvikvm(874): GC_EXTERNAL_ALLOC freed 31K, 36% free 4479K/6983K, external 1145K/1657K, paused 89ms 

लगभग, मैं एक दुर्घटना मिला है।

ऐसा होता है जब मैं मेनू बटन (गतिविधियों को बदलना) पर क्लिक करता हूं। मैं एमुलेटर में परीक्षण, पता फोन में परिणाम न ...

logcat में दुर्घटना में त्रुटि:

04-24 08:26:34.158: E/GraphicsJNI(482): VM won't let us allocate 1536000 bytes 
04-24 08:26:34.158: D/dalvikvm(482): GC_FOR_MALLOC freed 0K, 64% free 4280K/11655K, external 11662K/13614K, paused 72ms 
04-24 08:26:34.158: D/skia(482): --- decoder->decode returned false 
04-24 08:26:34.168: D/AndroidRuntime(482): Shutting down VM 
04-24 08:26:34.168: W/dalvikvm(482): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
04-24 08:26:34.218: E/AndroidRuntime(482): FATAL EXCEPTION: main 
04-24 08:34:37.807: E/AndroidRuntime(522): java.lang.OutOfMemoryError: bitmap size exceeds VM budget 
04-24 08:26:34.218: E/AndroidRuntime(482): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.KeySoft.OpenGuide/com.KeySoft.OpenGuide.Favourites}: android.view.InflateException: Binary XML file line #2: Error inflating class <unknown> 
04-24 08:34:37.807: E/AndroidRuntime(522): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 
04-24 08:34:37.807: E/AndroidRuntime(522): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:470) 
04-24 08:34:37.807: E/AndroidRuntime(522): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:284) 
04-24 08:34:37.807: E/AndroidRuntime(522): at com.KeySoft.OpenGuide.Top20.readBitmapImage(Top20.java:483) 
04-24 08:34:37.807: E/AndroidRuntime(522): at com.KeySoft.OpenGuide.Top20.addShopToList(Top20.java:251) 
04-24 08:34:37.807: E/AndroidRuntime(522): at com.KeySoft.OpenGuide.Top20.SqlShopsVissza(Top20.java:439) 
04-24 08:34:37.807: E/AndroidRuntime(522): at com.KeySoft.OpenGuide.Top20.onCreate(Top20.java:182) 
04-24 08:34:37.807: E/AndroidRuntime(522): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
04-24 08:34:37.807: E/AndroidRuntime(522): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
04-24 08:34:37.807: E/AndroidRuntime(522): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
04-24 08:34:37.807: E/AndroidRuntime(522): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
04-24 08:34:37.807: E/AndroidRuntime(522): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
04-24 08:34:37.807: E/AndroidRuntime(522): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-24 08:34:37.807: E/AndroidRuntime(522): at android.os.Looper.loop(Looper.java:130) 
04-24 08:34:37.807: E/AndroidRuntime(522): at android.app.ActivityThread.main(ActivityThread.java:3683) 
04-24 08:34:37.807: E/AndroidRuntime(522): at java.lang.reflect.Method.invokeNative(Native Method) 
04-24 08:34:37.807: E/AndroidRuntime(522): at java.lang.reflect.Method.invoke(Method.java:507) 
04-24 08:34:37.807: E/AndroidRuntime(522): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
04-24 08:34:37.807: E/AndroidRuntime(522): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
04-24 08:34:37.807: E/AndroidRuntime(522): at dalvik.system.NativeStart.main(Native Method) 

मैं एमुलेटर पर 256 एमबी रैम का उपयोग ... शायद मैं इस सब से बच सकते हैं वास्तविक उपकरणों के साथ? सस्ते उपकरणों भी कम से कम 384 एमबी रैम (गैलेक्सी मिनी), लेकिन है oftem अधिक ...

+1

से अधिक ऑब्जेक्ट आकार आवंटित करते हैं जो आपको बताता है कि आप स्मृति का उपयोग कर रहे हैं। यदि आपका ऐप आपको मिलने वाले त्रुटि संदेश को क्रैश करता है। वे सिर्फ कचरा संग्रह और जस्ट-इन-टाइम कंपाइलर के बारे में जानकारी हैं। यह संभावना है कि आप बहुत अधिक स्मृति का उपयोग करें या यद्यपि एक रिसाव है। – zapl

+0

मेरा प्रश्न संपादित –

+0

मुझे लगता है कि आप बड़ी छवियों का उपयोग कर रहे हैं। कहीं लाइन 2 पर लेआउट xml फ़ाइल से संबंधित है। चूंकि स्मृति प्रति ऐप सीमित है (16 एमबी की तरह sth) जब आप छवियों का उपयोग करते हैं तो आपको बहुत रूढ़िवादी होना पड़ता है। एक 1 मेगापिक्सेल (1000x1000) छवि के लिए पहले से ही 4 मेगाबाइट रैम की आवश्यकता है। – zapl

उत्तर

1

के रूप में आप टिप्पणी I use a 800x480 image. How can i make a good background with smaller size ?

नीचे कोड का एक टुकड़ा है कि आप एक बिटमैप आकार बदलने के लिए अनुमति देगा में कहा है।

public Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) { 

int width = bm.getWidth(); 

int height = bm.getHeight(); 

float scaleWidth = ((float) newWidth)/width; 

float scaleHeight = ((float) newHeight)/height; 

// create a matrix for the manipulation 

Matrix matrix = new Matrix(); 

// resize the bit map 

matrix.postScale(scaleWidth, scaleHeight); 

// recreate the new Bitmap 

Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false); 

return resizedBitmap; 

} 
1

प्रश्न 1: यह स्मृति लीक नहीं है। JitTable स्टोर जेनी संदर्भ के लिए उपयोग किया जाता है। उदाहरण के लिए, जब आप न्यूग्लोबलरफ एपी को कॉल करते हैं तो जिटटेबल 1 रिकॉर्ड बढ़ाएगा।

इस लॉग का अर्थ है कि जेटटबल पर्याप्त नहीं है, वीएम स्वत: आकार का आकार बदल देगा। इसलिए चिंता न करें, आप केवल बेकार संदर्भ को सही रिलीज रखें। यह ठीक है।

प्रश्न 2:
जीसी_EXTERNAL_ALLOC, जब आप मूल स्मृति आवंटित करते हैं लेकिन स्मृति पर्याप्त नहीं है, तो जीसी कहा जाता है। GC_CONCURRENT, जब आप ऑब्जेक्ट आकार 384K https://developer.android.com/tools/debugging/debugging-memory.html#LogMessages

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