突然大量のメモリを使用してアプリケーションをプロファイリングしていますが、次のようになっています。
sun.java2d.loops.ProcessPath$Point
ほぼ11.000.000回割り当てられているため。
それは何ですか、これに対する解決策はありますか?
私の最初の回答は、これが実際に多くのメモリ/CPU サイクルを使用しているかどうかを質問することです。パッケージは Sun の JVMのsun.
内部実装であるため、コードの実行内容の低レベルの詳細である可能性があります。これらのオブジェクトが大量のメモリを占有している場合は問題になる可能性がありますが、1,100 万の割り当てが見られるだけでは、何かが異常であることを示すものではありません。
編集: 少しグーグルで調べてみると、これが 2D 平面上の特定の点への参照をエンコードするために使用されるオブジェクトであることを示しているようです。グラフィックスに関係することをしている場合、大量のグラフィックスが生成される可能性があります。さらに、それぞれが 2 つの整数 (x 座標と y 座標) とブール値のみを格納するため、大まかなスキームでは非常に小さなオブジェクトになります。これらの 1,100 万回の割り当てのいずれもガベージ コレクションが行われなかったとしても (大部分はローカル変数であると予想されるため、すぐに収集されるはずです)、ヒープの大部分を占めることはありません。少量の RAM を搭載したデバイスで実行されます。
つまり、他の場所で問題を探してください。リークを見つけるには、現在のヒープ領域を大量に占有しているオブジェクトを調べたり、現在参照されているオブジェクトの数を調べたりする方がおそらく役立つでしょう。選択したツールを使用してメモリ リークを見つけて鎮圧する方法に関するガイドラインを提供するドキュメントをお読みください。特定のクラスに必要な数がわかっている場合を除き、割り当ての合計を確認することはほとんど役に立ちません (たとえば、シングルトンが 1 回だけ作成されていることを確認するとよい場合があります)。
メモリの問題を解決しました。コードのいくつかの場所で厄介な参照処理を行っていました。