【摘要】
目录
目录
1、什么是内存泄漏
2、内存泄漏的原因
2、内存泄漏有哪些情况
2.1 代码中没有及时释放,导致内存无法回收。
2.2 资源未关闭造成的内存泄漏
2.3 全局缓存持有的对象不使用的时候没有及时移除,导致一直在内存中无法移除
2.4 静态集合类
2.5 堆外内存无法回收
3、内存泄漏的解决办法
4、内存问题排查
第一步 首先确认逻辑问题,…
目录
目录
2.3 全局缓存持有的对象不使用的时候没有及时移除,导致一直在内存中无法移除
1、什么是内存泄漏
内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成内存空间的浪费称为内存泄漏。随着垃圾回收器活动的增加以及内存占用的不断增加,程序性能会逐渐表现出来下降,极端情况下,会引发OutOfMemoryError导致程序崩溃。
2、内存泄漏的原因
JVM 虚拟机是使用引用计数法和可达性分析来判断对象是否可回收,本质是判断一个对象是否还被引用,如果没有引用则回收。在开发的过程中,由于代码的实现不同就会出现很多种内存泄漏问题,让gc 系统误以为此对象还在引用中,无法回收,造成内存泄漏。
2、内存泄漏有哪些情况
2.1 代码中没有及时释放,导致内存无法回收。
下面的代码,因为是双向链表,但是断开的不够彻底,prev节点依然引用这当前正在使用的节点,导致无法回收
public class ListNode {
int val;
ListNode next;
ListNode prev;
ListNode() {
}
ListNode(int val) {
this.val = val;
}
public ListNode(int val, ListNode next, ListNode prev) {
this.val = val;
this.next = next;
this.prev = prev;
}
public static void main(String[] args) {
ListNode curr = new ListNode(1);
ListNode prev = new ListNode(2);
ListNode next = new ListNode(3);
curr.prev = prev;
curr.next = next;
curr.prev = null;
}
}
© 版权声明文章版权归作者所有,未经允许请勿转载。THE END
喜欢就支持一下吧
相关推荐