java内存泄漏

概念:对象从创建,然后到进行使用,在使用完毕并且将不再使用后没有被进行回收,或无法进行回收,便出现了内存泄漏。内存泄漏可能会发生oom异常。

几种常见的内存泄漏

1、java中内存泄露8种情况的总结
2、博客第七点关于缓存对象使用弱引用的看法,我更赞同使用软引用:
弱引用:在jvm进行gc时会被直接回收的引用对象
软引用:在jvm进行gc时不会被直接回收的引用对象,当堆空间内存不够时会被部分回收,空出的空间用来存新的对象
缓存中的对象不应该是不使用就应该被回收的,应该是在缓存满了的情况下部分回收,所以软应用更加适合缓存对象,而弱引用最常见的是在使用ThreadLocal中使用
3、java中有四中引用类型:强、软、弱、虚 ,其中强引用是最普遍的【我们经常会new一个对象然后赋值给一个变量,他们之间就是一种强引用关系】

GC回收算法
JVM如何找到需要回收的对象,方式有两种:
1、引用计数法:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收【循环引用问题:当A引用B、B引用C、C引用A时便出现循环引用,使得ABC计数不为0导致ABC无法被回收,而实际上ABC对象已经不再在线程中使用了,所以引入了入下GC算法
2、可达性分析法:从 GC Roots 开始向下搜索,搜索所走过的路径称为引用链。当一个对象到 GC Roots 没有任何引用链相连时,则证明此对象是不可用的,那么虚拟机就判断是可回收对象。

GC Roots: 一组必须活跃的引用,是可达分析法搜索引用链的一组根节点
可以作为GC Root的有:
1、虚拟机栈(栈帧中的本地变量表)中引用的对象
2、方法区中类静态属性引用的对象
3、方法区中常量引用的对象
4、本地方法栈中JNI(即一般说的native方法)中引用的对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值