2012-04-24 4 views
7

は今、数週間のためのアンドロイドアプリを開発し、私はちょうど私がcatlogでこのようなメッセージを得たことに気づい:Jit:JitTableのサイズを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 MBのRAMを使用して...たぶん私はこのすべてを避けることができます実際のデバイスで? 安いデバイスもあり、少なくとも384メガバイトのRAM(ギャラクシーミニ)が、oftemもっと...

+1

これは、メモリを使用していることを示しています。アプリがクラッシュした場合は、エラーメッセージが表示されます。これらはガベージコレクションとJust-In-Timeコンパイラに関する情報です。あまりにも多くのメモリを使用したり、リークしている可能性があります。 – zapl

+0

編集した質問 –

+0

大きな画像を使用しているようです。どこか2行目のレイアウトxmlファイルに関連しています。メモリはアプリごとに制限されているので(16MBのようなsth)、画像を使用するときは非常に慎重でなければなりません。 1メガピクセル(1000x1000)のイメージにはすでに4メガバイトのRAMが必要です。 – 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は、jniリファレンスをストアするために使用されます。たとえば、NewGlobalRef Apiを呼び出すと、JitTableは1レコード増加します。

このログはJitTableが十分でないことを意味し、VMは自動的にサイズを変更します。だから心配しないでください。大丈夫です。

質問2:
GC_EXTERNAL_ALLOC、ネイティブメモリを割り当ててもメモリ不足の場合は、GCが呼び出されます。 GC_CONCURRENT、384Kを超えるオブジェクトサイズを割り当てる場合 https://developer.android.com/tools/debugging/debugging-memory.html#LogMessages

関連する問題