常用垃圾回收器组合参数设定
- -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日志详解
GC指YGC,FullGC则显示FullGC
DefNew:新生代垃圾回收,4544k->259k指回收前4544k,回收后259k.总大小6144k
4544k->4346k指整个堆的大小。19840k是整个堆的空间
内存溢出后的dump
调优分类
- 根据需求进行JVM规划和预调优
- 优化进行JVM运行环境(慢,卡顿)
- 解决JVM运行过程中出现的各种问题(OOM)