GC调优之避免临时对象进入老年代

什么是临时对象?

  1. 顾名思义,临时对象就是不能长期存活的对象,那么,怎么判断这个临时性呢?
  2. 从代码层来看,这个临时对象通常是指一些局部变量
  3. 对象有个属性叫分代年龄。分代年龄的值代表着这个对象经历的gc次数。在survivor区域不溢出的情况下经过有限次(默认是15次,具体要看系统实例情况,比如如果系统里年轻代大部分对象的分代年龄超过5就不太可能被回收,就可以认为分代年龄小于5的对象为临时对象)minor gc就能被回收的对象

临时对象进入看年代有什么后果

  1. 顾名思义,老年代是用来存放那些分代年龄较大的对象(能够长时间存活)。临时对象进入老年代,意味着老年代浪费了部分内存空间来存储无用的数据,最终导致full gc会更频繁的发生。而对老年代进行垃圾收集的成本相对minor gc好很多,有stop the world的过程,同时gc线程也会占用cpu资源。这些最终也导致了系统性能降低

怎么避免临时对象进入老年代

  1. 调整对象进入老年代的分代年龄的阈值
  2. 避免survivor区域的溢出(溢出会导致所有年轻代的对象直接进入老年代)
  3. 上述两种思路需要根据系统实际负载来调整分代年龄阈值跟年轻代各区域的大小
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值