java内存泄露
https://zhuanlan.zhihu.com/p/368830445
-
原因:JVM 虚拟机是使用引用计数法和可达性分析来判断对象是否可回收,本质是判断一个对象是否还被引用,如果没有引用则回收。在开发的过程中,由于代码的实现不同就会出现很多种内存泄漏问题,让gc 系统误以为此对象还在引用中,无法回收,造成内存泄漏。
-
内存泄露有哪些情况:
2.1. 代码中没有及时释放引用(ref=null)
2.2. 资源未关闭
2.3. 全局缓存持有的对象,不使用的时候没有及时排除,导致一直在内存中无法移除(设置过期时间)
2.4. 静态集合类的生命周期跟程序相同
2.5. 堆外内存无法gc
2.6. 内部类持有外部类:如果一个外部类的实例对象的方法返回了一个内部类的实例对象,这个内部类对象被长期引用了,即使那个外部类实例对象不再被使用,但由于内部类持有外部类的实例对象,这个外部类对象将不会被垃圾回收,这也会造成内存泄露。
2.7. HashSet集合元素的hash值被改变