2010-12-02 8 views
3

私は一連のビットマップを作成するアプリケーションを持っています。私はこれらのBitmapをSoftReferencesで保持していますので、メモリ不足を避けることができます。私は、SoftReferencesの収集を開始する前に、ヒープサイズを最大16MBまで拡大したいと思います。しかし、SoftReferenceは非常に熱心に収集されています。参照があまり熱心に収集されないように強制する必要はありますか?または手動で最大にヒープを拡張するには?可能であれば、16MBの割り当てでアプリケーションを起動する方法はありますか?AndroidヒープサイズとSoftReferences

答えて

3

現在のところ、SoftReferenceコレクションの動作を変更する方法はありません。

「手動でヒープを最大限に伸ばす」という意味がわかりません。

ビットマップクラスのインスタンスである場合(カスタムビットマップ実装とは対照的に)、ピクセルデータは実際にはネイティブヒープに格納されますが、厄介な「外部割り当て」アカウンティングトリックを使用するため、状況がさらに複雑になります。 (特に、記憶域はGCではなくファイナライザによって解放され、GCが完了した後にファイナライザを別のスレッドで実行する必要があります。メモリが足りなくなるまでビットマップを割り当てることができます。 OOMエラーが発生する前にメモリに保存されます)。

+0

。これはjavaの "-Xmx16m"と同等です。 – ab11

+0

これは、現在行われているヒープの最大サイズを制限します(Androidアプリフレームワークは、これをVMに正確に渡します)。最初のサイズを設定する "-Xms16m"と思っていましたか?その特定のオプションは外部割り当てのためにあなたが望むものを全くしません。隠されたメソッド(当初隠れていた、後に隠されていた)があります。これはdalvik.system.VMRuntime.setMinimumHeapSizeと呼ばれていました。これはおおよそあなたが望むことを意図していましたが、ヒントに過ぎず、将来的には消えてしまう可能性があります。 – fadden

1

Andriodの既知の問題です。 VMがソフトリファレンスを収集するとき、VMはすべてを収集するか、まったく収集しませんが、「一部」を収集する必要がありますが、フリーヒープが十分にある場合は何も収集しません。

チェック:私は起動時に、私のアプリのために16メガバイトの割り当てを強制する方法を期待していた「最大ヒープを育てる」ことでhttp://code-gotcha.blogspot.com/2011/09/softreference.html

関連する問題