JVM调优理解

文章是笔者对JVM调优的笼统理解,因此不会写具体的调优命令,需要到具体某方面时,读者再去自行查询。

调优核心概念

在这之前首先我们要知道怎样才算是“优”,不能笼统的说我的程序性能很好,所以就需要有一个具体的指标来衡量性能情况,而在JVM里面衡量性能两个指标分别“吞吐量”和“停顿时间”。

吞吐量 :程序运行过程中执行两种任务,分别是执行业务代码和进行垃圾回收,吞吐量大意就是说程序运行业务代码的时间越多程序的吞吐量就越高。

停顿时间: 因为JVM进行垃圾回收的时候,某些阶段必须要停止业务线程专心进行垃圾收集,停顿时间就是指JVM停止业务线程而去进行垃圾收集的这段时长,停顿时间越长就意味着用户线程等待的时间越长,停顿时间会直接影响用户使用系统的体验。

举个不是很恰当的例子帮助你理解

如果用户在点击一个功能之后500ms之内没有返回,就会使用户焦虑,那么500ms就是影响用户体验的一个标准了。如果你的业务代码执行到返回的时间需要运行的时间为400ms,那么意味着垃圾回收的停顿的时间必须控制在100ms之内才对用户体验没有影响。 所以这个时候你的调优硬性标准就是把停顿时间控制在100ms之内,然后在这个时间范围的基础上去调整JVM参数让吞吐量越高越好。

调整内存大小

首先,你可以用jstat命令去看你的服务的内存情况,像这样
在这里插入图片描述
看相关部分的情况,再去使用jinfo动态的去调整各部分内存大小。

垃圾收集器

  • CPU单核,那么毫无疑问Serial 垃圾收集器是你唯一的选择。

  • CPU多核,关注吞吐量 ,那么选择PS+PO组合。

  • CPU多核,关注用户停顿时间,JDK版本1.6或者1.7,那么选择CMS。

  • CPU多核,关注用户停顿时间,JDK1.8及以上,JVM可用内存6G以上,那么选择G1。

设置符合预期的停顿时间

现象:程序间接性的卡顿

原因:如果没有确切的停顿时间设定,垃圾收集器以吞吐量为主,那么垃圾收集时间就会不稳定。

注意:不要设置不切实际的停顿时间,单次时间越短也意味着需要更多的GC次数才能回收完原有数量的垃圾。

调整对象升老年代的年龄

现象:老年代频繁GC,每次回收的对象很多。

原因:如果升代年龄小,新生代的对象很快就进入老年代了,导致老年代对象变多,而这些对象其实在随后的很短时间内就可以回收,这时候可以调整对象的升级代年龄,让对象不那么容易进入老年代解决老年代空间不足频繁GC问题。

注意:增加了年龄之后,这些对象在新生代的时间会变长可能导致新生代的GC频率增加,并且频繁复制这些对象新生的GC时间也可能变长。

调整大对象的标准

现象:老年代频繁GC,每次回收的对象很多,而且单个对象的体积都比较大。

原因:如果大量的大对象直接分配到老年代,导致老年代容易被填满而造成频繁GC,可设置对象直接进入老年代的标准。

注意:这些大对象进入新生代后可能会使新生代的GC频率和时间增加。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值