JVM调优案例详解及面试题

JVM调优目的

减少STW (Stop The Work),减少full gc的次数和缩短full gc的时间在这里插入图片描述在这里插入图片描述
一个4核8G的订单系统,假设给JVM运行内存为3个G,按照上图比例老年代可分2G,
Eden 800M,S0,S1各100M,线程运行每秒产生60M对象,大概运行13秒就会占满Eden区,
前12秒产生的对象在做一个minor gc后被当作垃圾对象处理掉,第13秒产生的对象不是垃圾对象,
会被放到S0区
在这里插入图片描述
第13秒产生的60M对象大于S0区的50%会被放到老年代old,参考如下1.4对象动态年龄判断,
因此每隔13秒会有60M对象会被放到老年代old,大概7到8分钟就会放满老年代,
老年代放满后就会产生一次full gc,此时老年代里99%的对象是垃圾对象,会被清理掉
而一次full gc,会收集整个堆的垃圾对象,时间过长,而JVM调优的目的就是减少fullgc次数
在这里插入图片描述

面试题

能否对JVM调优,让其几乎不发生full gc?

答:能,如下图,当我们增加年轻代的内存(Eden,S0,S1)时, 线程运行每秒产生60M对象,大概运行25秒
就会占满Eden区,此时前24秒产生的对象在做一个minor gc后被当作垃圾对象销毁掉,第25秒产生的对象
会被放到S0区,第25秒产生的60M对象小于S0区的50%不会被放到老年代,当Eden再一次放满,
此时minor gc会销毁Eden中前24秒的垃圾对象和S0中的对象,Eden第25秒产生的对象会被放到S1区,
当Eden再一次放满,参考以上说明minor gc会销毁Eden中前24秒的垃圾对象和S1中的对象,
Eden第25秒产生的对象会被放到S0区,如此流转处理,让其几乎不发生full gc

总结:增大年轻代的内存,即调整Xmn的大小为2048m可以解决这个问题

在这里插入图片描述

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值