質問

私は突然大量のメモリを使用してアプリケーションをプロファイリングしていますが、これを取得しています:

sun.java2d.loops.ProcessPath $ Point

ほぼ11.000.000回割り当てられている。

これは何ですか。これに対する解決策はありますか?

役に立ちましたか?

解決

私の最初の応答は、これが実際に多くのメモリ/ CPUサイクルを使用しているかどうかを質問することです。 sun.パッケージは、SunのJVMの内部実装であるため、コードの実行内容の低レベルの詳細である可能性があります。これらのオブジェクトが大量のメモリを消費していることが問題になる場合がありますが、1100万の割り当てが表示されるだけでは、何かが異常であることを示すことはありません。

編集:小さなグーグルは、これが2D平面上の特定のポイントへの参照をエンコードするために使用されるオブジェクトであることを示しているようです。おそらく、グラフィックスを含む何かをしているなら、はい、大量のグラフィックスが生成される可能性があります。さらに、それぞれに2つの整数(xおよびy座標)とブール値のみが格納されるため、それらは大規模なスキームでは非常に小さなオブジェクトになります。これらの1,100万の割り当てのどれもガベージコレクションされなかった場合(そして、大部分はローカル変数であったため、迅速に収集されたはずです)、ヒープの大部分を占めることはありません。少量のRAMを搭載したデバイスで実行します。

言い換えれば、他の場所で問題を探してください。リークを見つけるために、現在のヒープスペースを大量に使用しているオブジェクトを調べたり、現在参照されているオブジェクトの数を調べたりする方がおそらく役立つでしょう。選択したツールを使用してメモリリークを検出および消去する方法に関するガイドラインを示すドキュメントをお読みください。特定のクラスについて何個あるべきかがわからない限り、合計割り当てを確認することはほとんど有用ではありません(たとえば、シングルトンが1回だけ作成されていることを確認するのがよい場合があります)。

他のヒント

メモリの問題を解決しました。私はコード内のいくつかの場所を処理する厄介な参照をしていました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top