ThreadLocal (上) --- Java中引用类型分析 && GC调优经验

B站up主视频

GC调优经验:
线上系统频繁GC,间歇性OOM,查了好久,发现是一些C++程序员转成java之后重写了finalize方法;把很多耗时的方法写在finalize里面了,如把打开的文件关闭掉,关闭网络连接,导致垃圾回收的时候很慢,延长了整个对象的生命周期,如果对象产生的速度很快,回收的速度很慢,就会造成对象越积越多,造成内存溢出OOM


Java中引用类型有哪几种?:强软弱虚
每种引用类型特点是什么?
每种引用类型的应用场景是什么?

强引用(一般的引用都是强引用):Object o = new Object();----把一个变量指向一块内存空间(指向一个对象)
软引用(SoftReference):
在这里插入图片描述

在这里插入图片描述
m指向SR空间【软引用空间】(硬的线),SR指向字节数组(软的线)
软引用特点:Xmx的内存空间够时不被回收,内存空间不够时软引用会被回收
在这里插入图片描述
弱引用:
在这里插入图片描述
输出:
在这里插入图片描述
虚引用(无论怎么拿都拿不到它,不管回不回收):
在这里插入图片描述
虚引用只有一个作用—管理直接内存(java的nio,和netty用到了直接内存【direct byte buffer】)属于操作系统的,jvm以外的内存,不用再拷贝的jvm中就可以直接访问
在这里插入图片描述
虚引用被回收的时候会先把那个对象M放到队列里面,周期性扫描队列,如果队列里面有对象,就要对其进行特殊处理;一般来说队列里面的对象指向队列外的直接内存,jvm对队列中的对象进行回收处理的时候要先把队列中的对象指向的jvm外的直接内存清除掉,再清除掉队列中的那个对象;所以虚引用在回收的时候只起到一个通知的作用。
在这里插入图片描述
在这里插入图片描述
虚引用在回收的时候的作用就是一个信号

在这里插入图片描述
强引用:很硬,除非垃圾回收能回收掉,否则内存溢出也回收不了
软引用:内存空间不够了软引用就被回收了
弱引用:只要一旦有垃圾回收,如果没有一个强引用指向这个对象,那么这个弱引用对象就被回收了,垃圾回收期看到它就当它不存在一样直接回收掉
虚引用:get不到它;当它被回收时会给一个通知,通知放在队列里,一般用来管理直接内存
在这里插入图片描述


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值