-UseParallelGC: 虚拟机运行在Server模式下的默认值,打开此开关后,使用Parallel Scavenge + Serial Old的收集器组合进行内存回收。-UseParallelOldGC: 打开此开关后,使用Parallel Scavenge + Parallel Old的收集器组合进行垃圾回收
老年代收集器
Serial Old收集器
Serial Old是Serial收集器的老年代版本,它同样是一个单线程收集器,使用“标记-整理”算法。
Parallel Old收集器
Parallel Old是Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法。
CMS收集器
CMS收集器是基于“标记-清除”算法实现的,它的运作过程相对于前面几种收集器来说要更复杂一些,整个过程分为6个步骤,包括:
初始标记(CMS initial mark)
并发标记(CMS concurrent mark)
并发预清理(CMS-concurrent-preclean)
重新标记(CMS remark)
并发清除(CMS concurrent sweep)
并发重置(CMS-concurrent-reset)
其中初始标记、重新标记这两个步骤仍然需要“Stop The World”。初始标记仅仅只是标记一下GC Roots能直接关联到的对象,速度很快,并发标记阶段就是进行GC Roots Tracing的过程,而重新标记阶段则是为了修正并发标记期间,因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段稍长一些,但远比并发标记的时间短。其他动作都是并发的。
分区收集-G1 收集器
JVM优化 JVM小工具
java jdk的bin目录下带有一些jvm小工具。
jps(Java Virtual Machine Process Status Tool)列出正在运行的java进程,并显示执行主类的名称及进程在本地JVM中的ID。
使用方法:
jps [options][hostid] [options]:
-q: 只输出LVMID
-m: 输出JVM启动时传给主类的方法
-l:输出主类的全名,如果是Jar则输出jar的路径
-v: 输出JVM启动参数
jstat(Java Virtual Machine Statistics Monitoring Tool)JVM统计信息监控工具.
监控JVM各种运行状态信息,如虚拟机进程中的类装载、内存、GC、JIT编译等数据。
使用方法:
vmid是虚拟机ID,在Linux/Unix系统上一般就是进程ID。interval是采样时间间隔。count是采样数目。
S0C、S1C、S0U、S1U:Surivor 0/1区容量(Capacity)和使用量(Used)
EC、EU:Eden区容量和使用量
OC、OU:年老代容量和使用量
MC、MU:方法区容量和使用量
CCSC、CCSU:压缩类容量和使用量
YGC、YGT:年轻代GC次数和GC耗时
FGC、FGT:Full GC次数和Full GC耗时
GCT:GC耗时
jmap(Java Virtual Machine Memory Map for Java)java内存映像工具。
用于生成堆转储快照,即dump文件可以查询finalize执行队列、Java堆和永久代的详细信息(使用率、当前用的GC等)。
jstack(Java Virtual Machine Stack Trace for Java)堆栈跟踪工具。
用于生成JVM当前的线程快照(即当前JVM内每一个条线程正在执行的方法堆栈集合)用于分析线程出现长时间停顿的原因。
javap查看经javac之后产生的JVM字节码代码
jcmd一个多功能工具,可以用来导出堆,查看Java进程、导出线程信息、执行GC、查看性能相关数据等。
jvisualvmJDK中最强大运行监视和故障处理工具
JVM参数介绍
-Xms:初始堆大小
-Xmx:最大堆大小
-XX:NewSize=n 设置年轻代大小
-XX:NewRatio=n 设置年轻代和老年代的比值
-XX:SurvivorRatio=n 年轻代中Eden区与两个Survivor区的比值
-XX:MaxPermSize=n 设置持久代大小
收集器设置
-XX:+UseSerialGC 设置串行收集器
-XX:+UseParallelGC 设置并行收集器
-XX:+UseParalledlOldGC 设置并行年老代收集器
-XX:+UseConcMarkSweepGC 设置并发收集器
垃圾回收统计信息
-XX:+PrintGC
-XX:+Printetails
-XX:PrintGCTimeStamps
-Xloggc:filename