未使用的@Repository类将导致内存泄漏



未使用的@Repository类将导致内存消耗

我们的生产应用程序服务器经常宕机,我们尝试使用eclipse内存分析器工具分析堆转储。

发现某些char []对象占用了更多内存。

因此,对于这个问题,我们分析了我们的应用程序代码,发现一个未使用的@Repository类。

这个未使用的@Repository类会导致内存问题吗?

import org.springframework.stereotype.Repository;

@Repository
public class BenchCommentDAOImpl extends BaseDAOImpl<BenchComment> implements BenchCommentDAO {

}

更新1

@Entity
@Table(name = "bnch_cmnt")
public class BenchComment extends BaseCrudEntity<Integer> implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "cmnt_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "bnch_id", referencedColumnName = "bnch_id")
@JsonBackReference
private Bench bench;
@Column(name = "bnch_id" , insertable=false ,updatable=false)
private Integer benchId;
@Column(name = "xtrnl_cmnt")
private String comment;
}

CCD_ 4类是从具有CCD_ 6作为字符串字段的CCD_。

因此,在堆转储分析器中,我看到一些与此comment字段匹配的值。这就是我怀疑的地方。

更新2

@JsonManagedReference
@OneToMany(mappedBy="bench",cascade=CascadeType.ALL,fetch=FetchType.EAGER,orphanRemoval=true)
private List<BenchComment> benchComments;

对于BenchCommentpojo类,我们确实存在OneToManyFetchType.EAGER的关系。这个实现会导致这个堆泄漏问题吗。?

我不认为您的内存泄漏与这个空存储库有任何关系
在其他项目中,我看到了未使用的存储库,但从未听说过任何内存泄漏。

也许还有其他可能的事情:

  1. Eager Relations
    两个连接的对象(例如,与@JoinColumn)如果在EAGER-模式中获取自身,则可能导致OutOfMemoryException
    (它们将递归地相互获取,直到您的RAM为空)

  2. java.lang.OutOfMemoryException:java堆空间

  3. 检测内存不足错误

空存储库并不意味着永远不会从数据库中提取对象。如果你的对象之间有关系,那么它们有时可能会出现在你的HEAP中。

如果你能找到原因,那么当你把它发布在这里时,我们会很高兴。

编辑

对于您使用FetchType.EAGER进行的编辑:是的,这是您的问题
Bench中,您急切地获取BenchComments,而在BenchComments中,您迫切地处理Bench。恶性循环。

只需移除EAGER-fetch类型,就可以了。

最新更新