JVM调优实战一(Parallel + ParallelOld)

常用垃圾回收器组合参数设定

  • -XX:+UseSerialGC=Serial New(DefNew) + SerialOld .
  • -XX:+UseConc(current)MarkSweepGC=ParNew +CMS + SerialOld
  • -XX:+UseParallelGC(默认)=Parallel Scavenge+Parallel Old(1.8默认)
  • -XX:+UseParallelOldGC=Parallel Scavenge+Pallel Old(该参数在JDK1.5之后已无用)
  • -XX:+UseG1GC=G1

查看JVM默认垃圾回收器方法:

  • java -XX:+PrintCommandLineFlags -version

-XX:InitialHeapSize=267879168 -XX:MaxHeapSize=4286066688 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)

HostSpot参数分类:

  • 标准:-开头,所有的HotSpot都支持
  • 非标准:-X开头,特定版本的HotSpot支持特定的命令
  • 不稳定:-XX开头,下个版本可能取消

JVM相关命令

1.内存溢出和内存泄露

内存泄露:memory leak 有一块无人占用的内存

内存溢出:out of memory 不断产生对象,超出系统内存

2.java -XX:+PrintCommandLineFlags 

3.java -Xmn10M -Xms40M -Xmx60M -XX:+PrintCommandLineFlags -XX:+PrintGC HellloGC -XX:+PrintGCDetails -XX:+PrintGCtimeStamps -XX:+PrintGCCauses

Xms40M=最小堆内存  Xmx60M=最大堆内存

-XX:PrintGC HelloGC =打印GC回收信息

-XX:+PrintGCDetails =打印GC更详细信息

-XX:+PrintGCtimeStamps =打印GC更详细信息

-XX:+PrintGCCauses=打印GC产生原因

4.java -XX:+UseConcMarkSweepGC -XX:PrintCommandLineFlags HelloGC

5.java -XX:+PrintFlagsInitial  默认参数值

6.java -XX:+PrintFlagsFinal 最终参数值

7.java -XX:+PrintFlagsFinal | grep GC

8.java -XX:+PrintFlagsFinal -version | grep GC

GC日志详解

JVM调优实战一(Parallel + ParallelOld)

GC指YGC,FullGC则显示FullGC

DefNew:新生代垃圾回收,4544k->259k指回收前4544k,回收后259k.总大小6144k

4544k->4346k指整个堆的大小。19840k是整个堆的空间

内存溢出后的dump

JVM调优实战一(Parallel + ParallelOld)

调优分类

  • 根据需求进行JVM规划和预调优
  • 优化进行JVM运行环境(慢,卡顿)
  • 解决JVM运行过程中出现的各种问题(OOM)