01JVM调优调优--总结
Posted gcq243627152qq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01JVM调优调优--总结相关的知识,希望对你有一定的参考价值。
JVM调优主要原理总结:
a通过内存设置,减少GC触发。如:存新生代的比例和老年代的比例最好为1:2或者1:3。减少GC对老年代的回收
b设置并行并发垃圾器,减少GC触发时延迟卡顿。
c通过命令行查看优化前后参数,对比分析出优化的具体数据。
d.其他参数常见问题
1)内存溢出解:设置堆内存大小-Xms1m –Xmx10m
2)设置栈内存大小: 设置最大调用深度-Xss5m
1.内存结构:总结内存结构对应的内存参数,为后续调优做准备
a.概述:JDK1.6,1.7,1.8版本中内存布局
b.私有:程序计数器,虚拟机栈(防止栈溢出),本地方法栈
c.公有:方法区,堆(新生区(伊甸区,幸存者区)触发Minor GC,老年区,永代区-方法区)
2.基础:先了解内存结构中的各个参数,合理设置减少垃圾回收次数。再了解各个内存结构对应的垃圾回收算法,具体由垃圾收集器实现
a参数说明:分析堆的各个参数, 通过调节内存,内存比例减少GC触发达到优化目的!
-Xms 堆初始值
-Xmx 堆最大可用值
-Xmn 新生代堆最大可用值
-XX:SurvivorRatio 用来设置新生代中eden空间和from/to空间的比例.
b垃圾收集器
前置知识:主要了解内存中不同位置对应的不同垃圾回收算法,避免触发全局GC而引发卡顿,中断现象
1)垃圾回收算法(不同的内存结构对应采用不同的垃圾回收算法)
2)GC种类:触发在不同的位置垃圾回收机制,对应不同的GC
3)垃圾收集器种类
具体设置
3.参数调优:具体设置
堆的参数配置
实例
-XX:+PrintGC 每次触发GC的时候打印相关日志
-XX:+UseSerialGC 串行回收
-XX:+PrintGCDetails 更详细的GC日志
-Xms 堆初始值
-Xmx 堆最大可用值
-Xmn 新生代堆最大可用值
-XX:SurvivorRatio 用来设置新生代中eden空间和from/to空间的比例.
XX:MaxTenuringThreshold
4.垃圾收集器调优:单线程,多线程,不同的垃圾回收算法会影响效率。
单线程:
1)Serial收集器:client模式下的默认回收器,
针对新生代的收集器,采用的是Copying算法,
年老代采用的是的Mark-Compact算法回收算法,标记(Mark)、清除(Sweep)、合并(Compact)
优点是实现简单高效,但是缺点是会给用户带来停顿
多线程:
1)ParNew收集器:一个工作在新生代的垃圾收集器,他只是简单的将串行回收器多线程快他的回收策略和算法
2)ParallelGC收集器:使用标记压缩使用算法进行实现
3)CMS(Concurrent Mark Sweep)收集器:CMS收集器是基于“标记-清除”算法实现的,整个收集过程大致分为4个步骤:
①.初始标记(CMS initial mark)
②.并发标记(CMS concurrenr mark)
③.重新标记(CMS remark)
④.并发清除(CMS concurrent sweep)
4)G1收集器:分代垃圾回收器,可多线程同时工作,不会完全阻塞应用程序,来用了有效复制对象的方式,减少空间碎片
目标取代CMS回收器,G1回收器拥有独特的垃圾回收策略
5.调优反馈
查看初始默认值-XX:+PrintFlagsInitial
主要查看修改更新 -XX:+PrintFlagsFinal
6.原理
总原则
减少垃圾回收次数
具体设置
初始堆值和最大堆内存内存越大,吞吐量就越高。
最好使用并行收集器,因为并行手机器速度比串行吞吐量高,速度快。
设置堆内存新生代的比例和老年代的比例最好为1:2或者1:3。
减少GC对老年代的回收。
以上是关于01JVM调优调优--总结的主要内容,如果未能解决你的问题,请参考以下文章
03JVM调优调优--2.基础:参数说明(堆参数说明),垃圾收集器(前置知识:垃圾回收算法,GC种类),垃圾收集器(种类,相关介绍)