分为两类,一种是boolean类型,设置生效不生效,另一类是设置值。-XX:<name>=<value>
-XX:+PrintFlagsInitial 初始值 -XX:+PrintFlagsFinal 最终值
jinfo -flags pid,打印手动赋过值得
jinfo -flag 参数名称 pid,查看进程参数
jinfo -flag MaxHeapSize 23789
jstat -<option> pid
-class 类加载信息
-compiler 编译信息
-gc 垃圾回收信息
-printcompilation
[root@localhost home]# jstat -class 11359 1000 10
Loaded Bytes Unloaded Bytes Time
6654 12119.4 32 44.8 6.07
6654 12119.4 32 44.8 6.07
6654 12119.4 32 44.8 6.07
[root@localhost home]# jstat -gc 11359 1000 10
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
1088.0 1088.0 272.1 0.0 8704.0 3000.8 21888.0 14094.7 36096.0 34306.6 4864.0 4425.1 52 0.163 2 0.076 0.239
1088.0 1088.0 272.1 0.0 8704.0 3000.8 21888.0 14094.7 36096.0 34306.6 4864.0 4425.1 52 0.163 2 0.076 0.239
1088.0 1088.0 272.1 0.0 8704.0 3000.8 21888.0 14094.7 36096.0 34306.6 4864.0 4425.1 52 0.163 2 0.076 0.239
1088.0 1088.0 272.1 0.0 8704.0 3000.8 21888.0 14094.7 36096.0 34306.6 4864.0 4425.1 52 0.163 2 0.076 0.239
jstat -gc参数
List<User> userList = new ArrayList();
/**
* -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home
* java.lang.OutOfMemoryError: Java heap space
* Dumping heap to /home/java_pid10107.hprof ...
* Heap dump file created [48133870 bytes in 0.202 secs]
* Exception in thread "http-nio-8080-exec-1" java.lang.OutOfMemoryError: Java heap space
* @return
*/
@GetMapping("/heap")
public String heap()
{
int i=0;
while(true)
{
userList.add(new User(UUID.randomUUID().toString(),i++));
}
}
List<Class<?>> classList = new ArrayList<Class<?>>();
@GetMapping("/noheap")
public String noheap()
{
classList.addAll(Metaspace.createClasses());
return "noheap";
}
/*
* https://blog.csdn.net/bolg_hero/article/details/78189621
* 继承ClassLoader是为了方便调用defineClass方法,因为该方法的定义为protected
* */
public class Metaspace extends ClassLoader {
public static List<Class<?>> createClasses() {
// 类持有
List<Class<?>> classes = new ArrayList<Class<?>>();
// 循环1000w次生成1000w个不同的类。
for (int i = 0; i < 10000000; ++i) {
ClassWriter cw = new ClassWriter(0);
// 定义一个类名称为Class{i},它的访问域为public,父类为java.lang.Object,不实现任何接口
cw.visit(Opcodes.V1_1, Opcodes.ACC_PUBLIC, "Class" + i, null,
"java/lang/Object", null);
// 定义构造函数<init>方法
MethodVisitor mw = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>",
"()V", null, null);
// 第一个指令为加载this
mw.visitVarInsn(Opcodes.ALOAD, 0);
// 第二个指令为调用父类Object的构造函数
mw.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object",
"<init>", "()V");
// 第三条指令为return
mw.visitInsn(Opcodes.RETURN);
mw.visitMaxs(1, 1);
mw.visitEnd();
Metaspace test = new Metaspace();
byte[] code = cw.toByteArray();
// 定义类
Class<?> exampleClass = test.defineClass("Class" + i, code, 0, code.length);
classes.add(exampleClass);
}
return classes;
}
}
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./
jmap -dump:live,format=b,file=heap.hprof pid
> jmap -heap pid
[root@localhost home]# jmap -heap 11359
Attaching to process ID 11359, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.191-b12
using thread-local object allocation.
Mark Sweep Compact GC
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 33554432 (32.0MB)
NewSize = 11141120 (10.625MB)
MaxNewSize = 11141120 (10.625MB)
OldSize = 22413312 (21.375MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
New Generation (Eden + 1 Survivor Space):
capacity = 10027008 (9.5625MB)
used = 4085912 (3.8966293334960938MB)
free = 5941096 (5.665870666503906MB)
40.749064925449346% used
Eden Space:
capacity = 8912896 (8.5MB)
used = 3807328 (3.630950927734375MB)
free = 5105568 (4.869049072265625MB)
42.71706973805147% used
From Space:
capacity = 1114112 (1.0625MB)
used = 278584 (0.26567840576171875MB)
free = 835528 (0.7968215942382812MB)
25.00502642463235% used
To Space:
capacity = 1114112 (1.0625MB)
used = 0 (0.0MB)
free = 1114112 (1.0625MB)
0.0% used
tenured generation:
capacity = 22413312 (21.375MB)
used = 14432968 (13.764350891113281MB)
free = 7980344 (7.610649108886719MB)
64.39462405199195% used
13278 interned Strings occupying 1888808 bytes.
[root@localhost home]#