4

3Dモデル(1MB〜10MB)をメモリにロードしていますが、時間がかかります(1.5MBモデルの場合は20秒)。ログを見ると、ガベージコレクターが常にメモリを解放して一時停止していることがわかります。ログについては、以下を参照してください。

07-20 17:37:25.340: D/dalvikvm(2826): GC_FOR_ALLOC freed <1K, 8% free 79443K/85575K, paused 86ms
07-20 17:37:25.350: I/dalvikvm-heap(2826): Grow heap (frag case) to 78.511MB for 852408-byte allocation
07-20 17:37:25.450: D/dalvikvm(2826): GC_FOR_ALLOC freed <1K, 8% free 80275K/86471K, paused 95ms
07-20 17:37:25.550: D/dalvikvm(2826): GC_FOR_ALLOC freed <1K, 8% free 80275K/86471K, paused 85ms
07-20 17:37:25.550: I/dalvikvm-heap(2826): Grow heap (frag case) to 79.325MB for 852408-byte allocation
07-20 17:37:25.660: D/dalvikvm(2826): GC_FOR_ALLOC freed <1K, 8% free 81108K/87367K, paused 96ms
07-20 17:37:25.760: D/dalvikvm(2826): GC_FOR_ALLOC freed 0K, 8% free 81108K/87367K, paused 87ms
07-20 17:37:25.760: I/dalvikvm-heap(2826): Grow heap (frag case) to 80.137MB for 852408-byte allocation
07-20 17:37:25.870: D/dalvikvm(2826): GC_FOR_ALLOC freed <1K, 8% free 81940K/88263K, paused 98ms
07-20 17:37:26.060: D/dalvikvm(2826): GC_CONCURRENT freed <1K, 5% free 83988K/88263K, paused 3ms+12ms
07-20 17:37:26.200: D/dalvikvm(2826): GC_FOR_ALLOC freed <1K, 5% free 84715K/88263K, paused 120ms
07-20 17:37:26.200: I/dalvikvm-heap(2826): Grow heap (frag case) to 83.660MB for 852312-byte allocation
07-20 17:37:26.310: D/dalvikvm(2826): GC_FOR_ALLOC freed 0K, 5% free 85547K/89159K, paused 102ms
07-20 17:37:26.420: D/dalvikvm(2826): GC_FOR_ALLOC freed <1K, 5% free 85547K/89159K, paused 95ms
07-20 17:37:26.420: I/dalvikvm-heap(2826): Grow heap (frag case) to 84.473MB for 852312-byte allocation
07-20 17:37:26.520: D/dalvikvm(2826): GC_FOR_ALLOC freed <1K, 5% free 86379K/90055K, paused 105ms
07-20 17:37:26.640: D/dalvikvm(2826): GC_FOR_ALLOC freed <1K, 4% free 87212K/90055K, paused 117ms
07-20 17:37:26.650: I/dalvikvm-heap(2826): Grow heap (frag case) to 86.098MB for 852312-byte allocation
...

モデルがロードされるまでガベージコレクションを延期することは可能ですか?他のパフォーマンスのヒントも大歓迎です:)

4

3 に答える 3

2

いいえ、ガベージ コレクションを延期したり、他の方法で制御したりすることはできません。

ただし、 from DDMS を使用Allocation Trackerして、新しいオブジェクトを作成している正確な場所を見つけることができます。同じオブジェクトとバッファを再利用するようにしてください。オートボクシングなどは避けてください。使用に関するこの記事Allocation Trackerが役立つ場合があります。

于 2012-07-20T16:11:47.547 に答える
1

番号。

いずれにせよ、ログで気付いた場合、VM はメモリ不足に苦しんでいます。〜5%無料です。アプリを実行し続けるには、GC を実行する必要があります

さらに、できればそうしたくありません。知的な人々は、何十年にもわたって最適なガベージ コレクション アルゴリズムを開発してきました。彼らより賢くしようとしないでください。

于 2012-07-20T16:11:33.987 に答える
1

いいえ、これは不可能です。仮想マシンがこれを処理し、変更することはできません。ただし、モデルのロードを高速化するには、.3ds/.obj/... ファイルの代わりにシリアル化されたオブジェクトを使用することを検討できます。それらはより速くロードされ、より少ないメモリを使用します。

jpct およびシリアライズされたオブジェクトに関するwikiを確認してください。

于 2012-07-21T23:30:01.177 に答える