美文网首页
GC调优之避免临时对象进入老年代

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

作者: 穹柏 | 来源:发表于2021-06-10 16:31 被阅读0次

    什么是临时对象?

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

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

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

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

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

    相关文章

      网友评论

          本文标题:GC调优之避免临时对象进入老年代

          本文链接:https://www.haomeiwen.com/subject/kqfpeltx.html