未使用的@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;

}

@Repository 类是从 BenchComment 类扩展而来的,后者将 comment 作为字符串字段。

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

更新 2

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

对于 OnetoMany pojo 类,我们确实与 FetchType.EAGERBenchComment 关系。此实现是否会导致此堆泄漏问题。?

解决方法

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

也许还有其他一些可能:

  1. 急切的关系
    如果两个对象在 await showGeneralDialog( barrierColor: AppStyle.primaryColor.withOpacity(0.3),transitionBuilder: (context,a1,a2,widget) { return Transform.scale( scale: a1.value,child: Opacity(opacity: a1.value,child: WidgetScreenToOpen()),); },transitionDuration: Duration(milliseconds: 500),barrierDismissible: true,barrierLabel: 'Label',context: context,pageBuilder: (context,animation1,animation2) { return Container(); }).then((result) { return result; }); 模式下获取自身,则连接的两个对象(例如使用 @JoinColumn)可能会导致 OutOfMemoryException
    (它们会递归地相互获取,直到你的 RAM 为空)

  2. java.lang.OutOfMemoryException: java heap space

  3. Detecting out of memory errors

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

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

编辑

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

只需删除 Bench-fetch-types 就可以了。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...