以前全部关于JVM的知识,主要视为JVM调优作准备的。
对于虚拟机的调优步骤,通常分为3步:html
以上3步循环执行,最终目的是肯定好启动参数。并发
考核虚拟机的指标:jvm
通常虚拟机的所使用的内存是肯定的,优化指标主要体如今需求上是要低延迟仍是高吞吐量。工具
压力测试的参数及接口主要看业务。性能
Jdk在jdk/bin目录下自带了一些可视化工具: 如jvisualvm和jconsole。
Jdk在运行时也可使用命令行来查看当前虚拟机的运行状态:测试
压测调优阶段推荐使用可视化工具。线上紧急排查定位问题时使用命令行查看。优化
对于GC日志来讲,都是一些固定的格式,能看懂就行。spa
特别注意的是:启动JVM后的操做系统自己的剩余内存必定要足够,在调优期间,要适当查看系统剩余内存状态,不能太低。操作系统
常见的GC方式:.net
JVM常见设置
堆设置
-Xms:初始堆大小
-Xmx:最大堆大小
-Xmn:年轻代内存大小 -XX:NewRatio:设置年轻代和年老代的比值。
-XX:SurvivorRatio:年轻代中Eden区与两个Survivor区的比值。
-XX:MaxPermSize:设置持久代大小,jdk1.7以前有效。1.8以后给为元空间 -XX:MaxMetaspaceSize:设置元空间大小 -XX:PretenureSizeThreshold:直接晋升到老年代的对象大小。大于这个参数的对象将直接在老年代分配 -XX:MaxTenuringThrehold:晋升到老年代的对象年龄。当超过这个参数值时就进入老年代 -XX:+UseAdaptiveSizePolicy:动态调整Java堆中各个区域的大小以及进入老年代的年龄
收集器设置
-XX:+UseSerialGC:在新生代和老年代使用串行收集器
-XX:+UseParalledlOldGC:设置并行年老代收集器
-XX:+UseParNewGC:在新生代使用并行收集器
-XX:+UseParallelGC :新生代使用并行回收收集器
-XX:+UseParallelOldGC:老年代使用并行回收收集器
-XX:+UseConcMarkSweepGC:新生代使用并行收集器,老年代使用CMS+串行收集器
垃圾回收统计信息
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename
并行收集器设置
-XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数
-XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
-XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)
并发收集器设置
-XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU状况
-XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数 -XX:ParallelCMSThreads:设定CMS的线程数量
-XX:CMSInitiatingOccupancyFraction:设置CMS收集器在老年代空间被使用多少后触发
-XX:+UseCMSCompactAtFullCollection:设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片的整理
-XX:CMSFullGCsBeforeCompaction:设定进行多少次CMS垃圾回收后,进行一次内存压缩
-XX:+CMSClassUnloadingEnabled:容许对类元数据进行回收
-XX:CMSInitiatingPermOccupancyFraction:当永久区占用率达到这一百分比时,启动CMS回收
-XX:UseCMSInitiatingOccupancyOnly:表示只在到达阀值的时候,才进行CMS回收
参考资料: