2

jprofiler を使用して J2EE Web アプリケーションのプロファイルを作成しました。VM テレメトリ グラフと記録されたオブジェクトを調べると、大量のメモリ リークがあることがわかりました。ヒープ ウォーカーを使用すると、休止状態の基準、query.list、template.find、過剰な redid hashCode、equals メソッド、および一部のカスタム リクエスト プロセッサが原因で、大量のメモリ リークが発生していると結論付けます。私が理解できないのは、メモリリークがどのように発生するかです。

私はGoogleで多くのことをチェックしましたが、基準がHQLよりも明らかにSQLよりも遅いことは理解できますが、メモリリークは非常に興味深いものです。メモリリークの可能性はありますか?

記録されたオブジェクト画面の下で、ハッシュマップ オブジェクトがほぼ 100% に増加し、メモリ リーク グラフが上向きに滑らかになりました。

また、私のハッシュコードと等号のメトールもお見せします。ぜひご覧ください。

public boolean equals(Object other) {
    if ( !(other instanceof Associate) ) return false;
    Associate castOther = (Associate) other;
    return new EqualsBuilder()
        .append(this.getAssociateId(), castOther.getAssociateId())
        .isEquals();
}

public int hashCode() {
    return new HashCodeBuilder()
        .append(getAssociateId())
        .toHashCode();
}

どうもありがとう。

4

2 に答える 2

3

EqualsBuilderはリフレクションを使用しますが、これはパーマ生成スペースに影響を与える可能性があります。

なぜそれらに依存するのですか?自分で書いてみませんか?IntelliJを使用すると、影響を受けずに完全に機能するメソッドが生成されます。Joshua Blochのレシピに従ってください。そうすれば、依存関係も1つ少なくなります。

于 2011-04-26T09:44:16.940 に答える
0

equalsさて、またはへのすべての呼び出しで新しいオブジェクトを作成しますhashCode。これにより、GCがこれらのオブジェクトを実行または収集しない場合、メモリ消費量が増える可能性があります。これが原因でメモリの問題がありますか?

于 2011-04-26T09:44:54.990 に答える