java的内存泄漏

1、内存泄漏概念

一个不再被程序使用的对象或变量一直被占据在内存中。

2、长生命周期的对象持有短生命周期对象的引用

尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致短生命周期的对象不能被回收,就是程序员可能创建了一个对象,以后一直不再使用这个对象,这个对象却一直被引用,即这个对象无用但是却无法被垃圾回收器回收的,这就是java中可能出现内存泄露的情况

3、HashSet集合

当一个对象被存储进HashSet集合中以后,就不能修改这个对象中的那些参与计算哈希值的字段了,否则,对象修改后的哈希值与最初存储进HashSet集合中时的哈希值就不同了,在这种情况下,即使在contains方法使用该对象的当前引用作为的参数去HashSet集合中检索对象,也将返回找不到对象的结果,这也会导致无法从HashSet集合中单独删除当前对象,造成内存泄露。

4、Hibernate的一级缓存

Hibernate的Session(一级缓存)中的对象属于持久态,垃圾回收器是不会回收这些对象的(无用但可达),然而这些对象中可能存在无用的垃圾对象。

原文地址:https://www.cnblogs.com/zhai1997/p/12701308.html