以一个简单的例子记录JVM 参数的测试, 包含堆 和 GC.
1. 堆
/**
* 测试堆空间中才用到的jvm参数
1. 在Run -> profile -> Edit configuration -> VM Option 配置中的 VM
-XX:+PrintFlagsInitial -XX:+PrintFlagsFinal 查看所有参数的默认初始值 和最终值
MaxHeapSize = 130862280 ?? (/1024/1024 =125M? )
InitialHeapSize = 0 ??
2. 具体查看某个参数的指令:
jps : 查看当前运行中的进程
jps -flag 要查看的flag 进程id
例如:
(1) jinfo -flag MaxHeapSize 18876
-XX:MaxHeapSize=2126512128 即最大堆空间大小为-> /1024/1024/1024 = 1.98G (物理内存为8G,即它的1/4)
(2) jinfo -flag InitialHeapSize 18876
-XX:InitialHeapSize=134217728 即初始堆空间大小为-> /1024/1024/1024 = 128M (物理内存为8G,即它的1/64)
(3)>jinfo -flag NewRatio 10876
-XX:NewRatio=2 即新生代与老年代在堆结构中的占比为 1:2 (老年代占两份)
(4) jinfo -flag MaxTenuringThreshold 10876
-XX:MaxTenuringThreshold=15 即新生代垃圾的最大年龄
更多参数参考官网: https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
*/
public class HeapTest {
public static void main(String[] args) {
System.out.println("main start");
try {
// 为了确保程序在短时间内一直运行,方便查看参数
Thread.sleep(1000000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("main end ");
}
}
2. GC (7中垃圾回收器)
package com.example.javatest.gctest;
/**
* VMOptions:
* -XX:+PrintCommandLineFlags 打印标志
* 回收器 #1 & #2 (串行,单线程,内存低,效率高)
* -XX:+UseSerialGC 新生代使用SerialGC, 同时老年代使用Serial Old GC
*
* 回收器#3
* -XX:+UseParNewGC: 新生代使用ParNew GC
*
* 回收器 #4 & #5 (并行,多线程, JDK8 中默认搭配)
* -XX:+UseParallelGC 新生代使用ParallelGC
* -XX:+UseParallelOldGC 老年代使用ParallelGC
* 二者可以相互激活
*
* 回收器 #6 (并发,低延迟即暂停时间短, JDK14 中移除)
* -XX:+UseConcMarkSweepGC: 表明老年代使用CMS GC, 同时新生代会触发对ParNew的使用
*
* 回收器 #7 (在延迟可控下,吞吐量优先)
* -XX:+UseG1GC 使用G1 回收器
*
* 查看使用的GC (垃圾回收器)
* jps
* 1 . jinfo -flag UseSerialGC 2436 --> -XX:-UseSerialGC
*
* JDK8 中默认使用 ParallelGC(新生代) 、 ParallelOldGC(老年代)
* 2. jinfo -flag UseParallelGC 2436 --> -XX:+UseParallelGC
* 3. jinfo -flag UseParallelOldGC 2436 --> -XX:+UseParallelOldGC
*/
public class GCTest3 {
public static void main(String[] args) {
System.out.println("main start");
try {
// 为了确保程序在短时间内一直运行,方便查看参数
Thread.sleep(1000000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("main end");
}
}
可参考官网参数介绍: https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html