一马平川
不积跬步无以至千里,后继才能薄发

JVM基本调优参数

2021年06月15日
0
未分类

指定堆大小

1
2
3
4
5
//指定堆最大
-XX:Xmx1024m

//指定堆初始大小
-XX:Xms1024m

Java方法栈

指定线程的栈最大空间

1
2
//默认256K
-XX:Xss128K

影响GC因素:

局部变量表槽位复用

在方法体中声明的变量都会在局部变量表中,如果超过其作用域,则会被之后声明的变量复用,如果是引用类型,则会失去引用,被GC。但如果只是超过作用域但是没有被其他变量复用,则不会失去引用。

栈内分配

逃逸分析

用于分析引用类型声明的变量的作用域是否会逃逸出方法体,如果作用域只在方法体内且不返回,则可以标量替换

标量替换

指类引用类型声明时,如果可以被

TLAB

TLAB(Thread Local Allocation Buffer)本地线程分配缓存,在类加载之后分配内存时,如果开启了这个选项,则可以在堆中属于线程的缓存区分配内存,不需要到共享的堆区进行内存申请,避免内存申请失败。开启了这个会使得栈内分配失效

1
2
3
4
5
//开启TLAB
-XX:+UseTLAB

//关闭
-XX:-UseTLAB

永久代&元空间

永久代

1
2
3
4
//指定永久代初始大小
-XX:PermSize64m
//指定最大永久代大小
-XX:MaxPermSize128m

元空间

元空间使用的是直接内存

1
2
//指定元空间最大大小,默认无限制直到用光系统内存
-XX:MaxMetaspaceSize512m

打印GC日志

jdk9之前

1
2
3
4
5
6
7
8
//打印简单GC日志
-XX:+PrintGC

//打印GC日志详情
-XX:+PrintGCDetails

//获取堆信息
-XX:+PrintHeadAtGC

jdk9、jdk10

1
2
3
4
5
//打印简单日志
-Xlog:gc

//打印日志详情
-Xlog:gc*

GC日志查看

注意:因为GC日志输出时机的原因,显示的数据可能并不准确,有问题的地方需要重新校对

DefNew :新生代

edenfromto

Tenured :老年代

Perm :永久代

类加载/卸载追踪

jdk9之前

1
-XX:+TraceClassLoading

jdk9、jdk10

1
-Xlog:class+load=info

柱状图分析

1
2
//配合在控制台使用ctrl+Break展示信息
-XX:+PrintClassHistogram

查看系统参数

1
2
3
4
5
//程序运行时展示手动配置的参数
-XX:+PrintVMOptions

//自动配置&手动配置的参数都展示
-XX:+PrintCommandLineFlags

指定堆大小

1
2
3
4
5
//指定堆最大
-XX:Xmx1024m

//指定堆初始大小
-XX:Xms1024m

Java方法栈

指定线程的栈最大空间

1
2
//默认256K
-XX:Xss128K

影响GC因素:

局部变量表槽位复用

在方法体中声明的变量都会在局部变量表中,如果超过其作用域,则会被之后声明的变量复用,如果是引用类型,则会失去引用,被GC。但如果只是超过作用域但是没有被其他变量复用,则不会失去引用。

栈内分配

逃逸分析

用于分析引用类型声明的变量的作用域是否会逃逸出方法体,如果作用域只在方法体内且不返回,则可以标量替换

标量替换

指类引用类型声明时,如果可以被

TLAB

TLAB(Thread Local Allocation Buffer)本地线程分配缓存,在类加载之后分配内存时,如果开启了这个选项,则可以在堆中属于线程的缓存区分配内存,不需要到共享的堆区进行内存申请,避免内存申请失败。开启了这个会使得栈内分配失效

1
2
3
4
5
//开启TLAB
-XX:+UseTLAB

//关闭
-XX:-UseTLAB

永久代&元空间

永久代

1
2
3
4
//指定永久代初始大小
-XX:PermSize64m
//指定最大永久代大小
-XX:MaxPermSize128m

元空间

元空间使用的是直接内存

1
2
//指定元空间最大大小,默认无限制直到用光系统内存
-XX:MaxMetaspaceSize512m

打印GC日志

jdk9之前

1
2
3
4
5
6
7
8
//打印简单GC日志
-XX:+PrintGC

//打印GC日志详情
-XX:+PrintGCDetails

//获取堆信息
-XX:+PrintHeadAtGC

jdk9、jdk10

1
2
3
4
5
//打印简单日志
-Xlog:gc

//打印日志详情
-Xlog:gc*

GC日志查看

注意:因为GC日志输出时机的原因,显示的数据可能并不准确,有问题的地方需要重新校对

DefNew :新生代

edenfromto

Tenured :老年代

Perm :永久代

类加载/卸载追踪

jdk9之前

1
-XX:+TraceClassLoading

jdk9、jdk10

1
-Xlog:class+load=info

柱状图分析

1
2
//配合在控制台使用ctrl+Break展示信息
-XX:+PrintClassHistogram

查看系统参数

1
2
3
4
5
//程序运行时展示手动配置的参数
-XX:+PrintVMOptions

//自动配置&手动配置的参数都展示
-XX:+PrintCommandLineFlags

如果喜欢这篇文章,可以给作者评个份哦~

原文声明: "转载本站文章请注明作者和出处Nothinglin ,请勿用于任何商业用途"

公众号:苦逼的学生仔