JVM性能调优(一):GC初级调优

JAVA 调优有一部分工作就是减少GC对系统的影响,主要从以下几个方面:

  • FULL GC频繁运行
  • FULL GC运行导致系统停顿

针对上面这两个问题,从垃圾回收器选择,垃圾回收参数调整两方面进行JVM调优。本文只说明从JVM的参数方面的调优,代码的优化也减少上面的问题,有时起到更佳效果。

一、垃圾收集器选择

现代 JVM 的 类型 繁多, 最 主流 的 四个 垃圾 收集 器 分别 是: Serial 收集 器( 常 用于 单 CPU 环境)、 Throughput( 或者 Parallel) 收集 器、 Concurrent 收集 器(并发环境下,且堆内存不大情况下使用) 和 G1 收集 器(堆内存大的情况下使用)。

  • 所有 的 GC 算法 都将 堆 划分 成了 老 年代 和 新生代。 
  • 所有 的 GC 算法 在 清理新生代对象时, 都使用 了“ 时空 停顿”( stop- the- world) 方式的垃圾收集方法, 通常此过程较快。

GC 算法 的 选择一方面取决于应用程序的特征, 另一方面取决于应用的性能目标。

1、当进行批量任务或关注程序吞吐量时,一句话总结:CPU够用时,Concurrent 收集器效果更好。

  • 使用 Throughput 收集器处理应用程序线程的批量任务能最大程度地利用 CPU 的处理能力, 通常能获得更好的性能。
  •  如果批量任务并没有使用机器上所有可用的CPU 资源, 那么 切换 到 Concurrent 收集器往往能取得更好的性能。

2、当关注相应时间时,需要进行性能测试才能得出结论,但一般情况下,CPU够用时,Concurrent 收集器效果更好。

  • 选择 Concurrent 收集器时, 如果堆较小, 推荐使用CMS 收集 器。
  • G1的设计使得它能够在不同的分区( Region) 处理堆, 因此它的扩展性更好, 比 CMS更易于处理超大堆的情况。

二、堆大小调整

  • 运行的所有JVM实例的堆内存和不要超过物理内存,超过会进行内存页切换,降级性能。
  • 经验值为每次GC回收可以回收掉70%的内存。设置方法:-Xms=初始大小  -Xmx=最大值 。
  • 通常情况下, 我们应该开启自适应调整, 因为垃圾回收算法依赖于调整 后的代的大小来达到它停顿时间的性能目标。

三、并发控制

  • 1. 几乎所有的垃圾收集算法中基本的垃圾回收线程数都依据机器上的CPU数目计算得出。
  • 2. 多个JVM 运行于同一台物理机上时, 依据公式计算出的线程数可能过高, 必须进行优化( 减少)。比如16CPU的机器,运行4个JVM, 可以控制每个JVM的并行GC线程为4。-XX ParallelGCThreads=N来控制。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值