2

我已经使用 jprofiler 分析了我的 J2EE Web 应用程序。通过查看 vm 遥测图和记录的对象,我发现存在巨大的内存泄漏。使用 heap walker,我得出结论,由于休眠条件、query.list、template.find、over-redid hashCode 和 equals 方法以及某些自定义请求处理器,存在大量内存泄漏。我无法理解的是如何可能存在内存泄漏。

我在谷歌上检查了很多,可以理解的是,标准比 HQL 慢,显然比 SQL 慢,但内存泄漏非常有趣。有没有内存泄漏的机会?

在记录对象屏幕下,hashmap 对象增加到近 100%,内存泄漏图向上平滑。

我还向您展示了我的哈希码和等于methol,请看一下:

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 使用反射,这会对 perm gen space 产生影响

为什么要依赖这些?为什么不自己写呢?如果您使用 IntelliJ,它会生成完美运行的方法而无需重新设计。按照Joshua Bloch 的食谱,你也会少一点依赖。

于 2011-04-26T09:44:16.940 回答
0

好吧,您在每次调用equalsor时创建一个新对象hashCode。如果 GC 不运行或收集这些对象,这可能会导致更高的内存消耗。您是否因此而有记忆问题?

于 2011-04-26T09:44:54.990 回答