メモリプロファイルが次のようになっているアプリケーションがあります。
(ソース:kupio.com)
メモリ使用量の上方への遅いクロールは、たくさんの小さくて単純な一時的なオブジェクトの割り当てによって引き起こされます。メモリが少ない状況(これはモバイルアプリです)では、制限の少ないメモリ量と比較すると、GCオーバーヘッドが顕著です。
アプリの性質上、これらのスパイクが発生し続けることがわかっているので、私はある種の多数の一時オブジェクト(素晴らしい名前)のプールを検討していました。これらのオブジェクトは、アプリの存続期間中存続し、可能な限り再利用されます(オブジェクトの存続期間が短く、予測可能性が高い場合)。
うまくいけば、これにより、収集されるオブジェクトの数が減り、パフォーマンスが向上することにより、GCの影響が軽減されます。
「割り当て」の方がコストが高く、キャッシュ自体の維持にオーバーヘッドが生じるため、これにも独自のパフォーマンス制限があります。
これは大量のコードへのかなり大きくて煩わしい変更になるので、誰かが同様のことを試みたのか、それが利点だったのか、またはこのような状況でGCを軽減する他の既知の方法があったのかと思いました。 。再利用可能なオブジェクトのキャッシュを管理する効率的な方法のアイデアも歓迎します。
通常、これはVMのGCパラメーターを調整し、スパイクを減らすための作業でしたが、モバイルアプリでは実際にはオプションではありません。したがって、使用しているJVmのGC動作を変更できない場合は、昔ながらのオブジェクトプーリングが最善の解決策になる可能性があります。
Apache Commons Poolライブラリはそのために適していますが、これがモバイルアプリの場合は、ライブラリの依存関係のオーバーヘッドが不要な場合があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加