0

arduino と通信しているアプリケーションがあり、arduino を制御するための netty インスタンスを実行しています。問題は、メモリが不足していないことですが、adb logcat によると、使用されているヒープ サイズに対する合計ヒープ サイズが小さすぎることです。の、

D/dalvikvm( 2862): WAIT_FOR_CONCURRENT_GC blocked 189ms

(少なくとも私にとっては) 何もしない単純なリクエストでさえ、gc の一時停止で少なくとも 1 秒は失われます。私は持っている

android:largeHeap="true"

マニフェストに設定されており、シミュレータ デバイスには 512 mb の VM ヒープがありますが、その数に近い場所には割り当てられていません (約 10 MB が割り当てられています)。10% の空き容量は安定しており、+/- 2 ~ 3% になるため、メモリ リークは発生しません。2 GB の RAM (他のすべてのアプリケーションを閉じた状態) を搭載した電話でも、常に 2 3 MB 未満の空きヒープで実行しています。これに対する回避策はありますか?

4

1 に答える 1

1

デバイスの RAM のサイズはそれほど重要ではありません。RAM が 2 GB あるからといってヒープが 2 GB になるわけではないからです。

Google の推奨事項で指定されている最小ヒープ サイズは 16MB です。それよりも小さなヒープは得られません。

largeHeapAndroid 3.0 以降でのみ動作し、より大きなヒープ サイズは保証されません。

より大きなヒープを取得するためにできることはあまりありませんが、NDK を使用してアプリを書き直すことができます。この場合、dalvik VM の外部で実行するため、ヒープ サイズは重要ではありません。必要に応じてデバイスの RAM。

ただし、ヒープ領域が 10% 空いている状態で実行することは悪くありません。

于 2013-03-27T01:27:26.470 に答える