私は時間の経過とともにスローダウンに苦しんでいるモバイルアプリケーションを持っています。私の感覚は、(部分的にはthis articleによって供給された)、これは、メモリの断片化によるアプリケーションの処理速度の低下によるものですが、わかりません。ここで時間をかけてアプリのメモリ使用のきれいなグラフです:断片化されたメモリはどのように見えますか?
fraggle rock http://kupio.com/image-dump/fragmented.png
グラフ上の4つのピークは、アプリ上の正確な同じタスクの4つの実行されています。私はタスクを開始し、それはメモリの束を割り当て、それは少し上に座って(上のフラットライン)、私はタスクを停止します。その時点で、System.gc()を呼び出します。メモリがクリーンアップされます。
正確に同じタスクの4回の実行のそれぞれは、実行に時間がかかります。グラフの下の点はすべて同じレベルに戻り、タスク実行の間にメモリリークがないように見えます。
私が知りたいことは、メモリ断片化が実現可能な説明であるか、私は既に見てきたことを心に留めて、別の場所で最初に見えるべきですか?グラフ上の低い点は比較的低いので、この状態では、問題の原因となる小さなメモリホールが多数存在することができないため、メモリは非常に断片化されません。
私はj2meメモリアロケータがどのように動作するのかわかりませんので、わかりません。誰も助言することはできますか?他の誰かがこれに問題があり、アプリのメモリプロファイルを認識していますか?
通常のJava VMはガベージコレクションの任務の一部としてそのヒープを圧縮します(断片化を取り除く) - J2MEについてはわかりません... – bdonlan