私はツリーの作成を含むシミュレーションを実行しています。 私のツリーの分岐係数は2/3から7/8です。ガベージコレクタとプール
私はそれを展開する必要があるたびに、私は子供のための配列を割り当てます。 私は1つのブランチを新しいツリーにします(ルートの子をルートとして設定することによって)ので、残りのツリーはゴミになります。
ガベージコレクタに自分の仕事をさせる方がいいかどうか(私はツリールートを変更するとSystem.gc()を使って収集を開始することを提案します)私がルートを変更すると、現在無駄なノードをすべてリサイクルします。
答えは:アンドロイドガベージコレクタが非常に最適化されているか、これがかなり消費されていても、オブジェクトの作成/破壊を制限する方が望ましいですか(私はすべてのツリーをたどり、私のプールのための各無駄なノード)
私は、アンドロイドGCは "進化"(それは基本的にあなたが低メモリを持っているときに実行されていません)と読んでいます。ツリーのルートはgcのガーベジが単一のパスですべてのツリーを集めるようにします。そうしないと、ノードだけが表示され、そのノードの子ノードは次のパスなどになります。
私は既にこの記事を読んでいますが(そして、それは本当に面白いですが)、私は特にアンドロイドgcについて話しています。私のアプリケーションでは、頻繁に実行するように継ぎ目があります(logcatはGC_Concurrentを印刷し、x%y/zを解放し、5ms + 6msとします)。アプリケーションはパフォーマンス上の問題ではありません(まだ60fpsで動作しています)、アンドロイド(モバイル版)**プラットフォームのベストプラクティス**については、ほとんど疑問に思っています(記事は2008年のものですから、アンドロイドgcに加えて、私はアンドロイドgcがそれ以降のバージョンで大きく変わったと思う) –
あなた自身のtreenodesを実装することは実際にはそれを解決する興味深い方法です。質問はここで何を測定しているのですか?パフォーマンスを測定していない場合は、メモリの使用率ですか?あなたがここで何を測定しているかを知っていない限り、どちらの利点が得られるかは分かりません。GCがあまりにも多くの時間を費やしているのですか?あなたがあなたのアプリから期待する回答を得ていませんか?それはあまりにも多くの記憶を占めていますか?あなた自身のプールを書くことによって、あなたはGCを改善するだろうと思いますか? gcが問題の場合は、gcがどれくらいの時間を使い果たしているかを測定し、プールを書き、再度測定してください。測定していますか? – Siddharth
私はすでにジェネリックプールを持っているので、TreeNodeのプールを書くことは、TreeNodeをリクエストするときに値を修正し、TreeNodeをリサイクルするときにすべての子をリサイクルするようにツリーをトラバースするという問題です。メモリは今のところ縫い目がない(私はまだ私のコードで解決するいくつかのバグを持っているので、私はまだ長い時間のシミュレーションを試していない)、そしてCPUはあまりではないが、私はモバイルで実行しているので私のコードが効率的になればなるほど、バッテリーを節約してユーザーを浪費させることになります。アンドロイドはこの件に関して残酷です(アプリがどれだけのバッテリーを消費するかをはっきりと示しています)。いいえ、私は測定していません..(良い点) –