未使用的@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;
对于BenchComment
pojo类,我们确实存在OneToMany
和FetchType.EAGER
的关系。这个实现会导致这个堆泄漏问题吗。?
我不认为您的内存泄漏与这个空存储库有任何关系
在其他项目中,我看到了未使用的存储库,但从未听说过任何内存泄漏。
也许还有其他可能的事情:
-
Eager Relations
两个连接的对象(例如,与@JoinColumn
)如果在EAGER
-模式中获取自身,则可能导致OutOfMemoryException
(它们将递归地相互获取,直到您的RAM为空) -
java.lang.OutOfMemoryException:java堆空间
-
检测内存不足错误
空存储库并不意味着永远不会从数据库中提取对象。如果你的对象之间有关系,那么它们有时可能会出现在你的HEAP中。
如果你能找到原因,那么当你把它发布在这里时,我们会很高兴。
编辑
对于您使用FetchType.EAGER
进行的编辑:是的,这是您的问题
在Bench
中,您急切地获取BenchComments
,而在BenchComments
中,您迫切地处理Bench
。恶性循环。
只需移除EAGER
-fetch类型,就可以了。