10

Android アプリケーションは、ガベージ コレクターの負荷を軽減するために、作成されるオブジェクトの数を制限する必要があるとよく耳にします。限られたメモリ フットプリントで追跡するために膨大な数のオブジェクトを作成したくない場合があることは理にかなっています。たとえば、従来のサーバー アプリケーションでは、数秒で 100,000 個のオブジェクトが作成されることは前代未聞ではありません。

問題は、これをどこまで取るかです。おそらく「物事を高速化する」ために静的状態に依存しているAndroidアプリケーションの例をたくさん見てきました。ガベージ コレクションが必要なインスタンスの数を数十から数百に増やすことで、本当に大きな違いが生じるのでしょうか? コーディング スタイルを変更して、本格的な Java-EE サーバー上にあるような数十万のオブジェクトを作成することは想像できますが、(おそらく) ガベージ コレクションされるオブジェクトの数を減らすために、一連の静的状態に依存しているようです。奇数。

パフォーマンスの高い Android アプリを作成するには、コーディング スタイルをどの程度変更する必要があるでしょうか?

4

2 に答える 2

10

「割り当てを避ける」というアドバイスは、通常、ゲーム ループに関するものです。VM はガベージを収集するために一時停止する必要がありますが、ゲームが 30 fps でアニメーション化されている間は、そのようなことは望ましくありません。オブジェクトを割り当てない場合、VM はガベージを収集してメモリを解放する必要がありません。ユーザーに問題が発生することなく実行する必要があるゲームがある場合は、関連する部分のコードを変更して、割り当てを最小限に抑えるかなくすことを検討する必要があります。

レシピを保持したり、写真を表示したりするアプリを作成している場合、私はそれについて心配する必要はありません。GC の問題は、ユーザーが気付く可能性が高いものではありません。

Dalvik GC (世代別コレクションなど) の今後の改善により、この問題は軽減されるはずです。

于 2010-04-07T18:40:02.063 に答える
4

それはあなたが何をしているか、そしてあなたのコーディングスタイルが今何であるかに本当に依存していると思います。モバイルデバイスとそれに応じたプログラムのハードウェア制限を常に念頭に置く必要がありますが、アプリを実行する場所に関係なく、そのことを認識しておくことをお勧めします。リアルタイムで更新する必要のある非常に集中的な計算やゲームのようなものを実行している場合は、NDKの使用を検討できますが、通常のユーザー主導の処理を実行している場合は、それほど悪くはありません。 。私のアドバイスは、質素になるように努めることですが、最適化がどのように実行されるかを理解するまで、最適化についてあまり心配しないでください。

于 2010-04-07T18:35:00.827 に答える