JVM调优

JVM调优的目的:

  • 一防止出现OOM
  • 较少 Full GC出现的频率

生产环境发生OOM,该如何处理,如何判断是否内存泄露导致:

  1. 首先查看服务器负载情况 CUP load gc是否频繁
  2. 使用命令工具进行分析:jstack,jmap等,也可以使用 arthas查看jvm状态信息
  3. 优化代码:针对出现问题的代码进行优化
  4. 优化jvm参数:包含堆栈大小,gc垃圾回收算法等 常用的cms:并发标记清除 算法:该算法不会进行内存整理,很容易造成内存碎片。
    但是该算法主要是为了减少STW

垃圾回收算法:

1、标记清除:分为两个阶段:标记、清除, 首先,gc会从根root开始标记对象,如果没有引用的对象,会在清除阶段进行回收,这种算法适合于内存对象比较多的情况,适合于老年代 缺点:因为仅仅是标志,没有对内存进行整理,造成内存碎片,针对内存空间,扫描了两次,第一次是对对象进行标记,第二次是对为标志的对象进行回收

2、复制算法:从根节点标记存活的对象,把存活的对象复制到另外一块内存,然后再回收之前的内存。 这种算法,适合内存对象较少的情况,内存扫描了一次(既标志,马上复制),适合于年轻代 缺点:需要额外的一块内存

3、标记-压缩算法:从根节点标记存活对象,然后把这些对象压缩到内存的另外一侧,然后清除边界外的内存,这种回收算法一般是出于老年代,避免了内存碎片

4、分代收集算法:在不同年代,使用不同的垃圾回收算法,新生代存活率低,可以使用复制算法。而老年代对象存活率搞,没有额外空间对它进行分配担保,所以只能使用标记清除或者标记整理算法


调优参数如下:

JVM参数设置为:

-Xms4096m //最大堆设置

-Xmx4096m //最小堆设置

-XX:+UseG1GC //使用G1垃圾收集器

-XX:MaxGCPauseMillis=20 //最大GC停顿时间,默认是200ms,这里设置20ms

-XX:+PrintGCDetails //打印GC详情日志

-XX:+PrintStringTableStatistics //打印字符串常量、引用常量统计

-XX:+PrintSafepointStatistics //打印停顿原因

-XX:+PrintGCApplicationStoppedTime //停顿时间输出到GC日志中


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值