1 | //指定堆最大 |
指定线程的栈最大空间
1 | //默认256K |
影响GC因素:
局部变量表槽位复用
在方法体中声明的变量都会在局部变量表中,如果超过其作用域,则会被之后声明的变量复用,如果是引用类型,则会失去引用,被GC。但如果只是超过作用域但是没有被其他变量复用,则不会失去引用。
栈内分配
逃逸分析
用于分析引用类型声明的变量的作用域是否会逃逸出方法体,如果作用域只在方法体内且不返回,则可以标量替换
标量替换
指类引用类型声明时,如果可以被
TLAB
TLAB(Thread Local Allocation Buffer)本地线程分配缓存,在类加载之后分配内存时,如果开启了这个选项,则可以在堆中属于线程的缓存区分配内存,不需要到共享的堆区进行内存申请,避免内存申请失败。开启了这个会使得栈内分配失效
1 | //开启TLAB |
永久代
1 | //指定永久代初始大小 |
元空间
元空间使用的是直接内存
1 | //指定元空间最大大小,默认无限制直到用光系统内存 |
jdk9之前
1 | //打印简单GC日志 |
jdk9、jdk10
1 | //打印简单日志 |
注意:因为GC日志输出时机的原因,显示的数据可能并不准确,有问题的地方需要重新校对
DefNew
:新生代
eden
、 from
、 to
Tenured
:老年代
Perm
:永久代
jdk9之前
1 | -XX:+TraceClassLoading |
jdk9、jdk10
1 | -Xlog:class+load=info |
1 | //配合在控制台使用ctrl+Break展示信息 |
1 | //程序运行时展示手动配置的参数 |
1 | //指定堆最大 |
指定线程的栈最大空间
1 | //默认256K |
影响GC因素:
局部变量表槽位复用
在方法体中声明的变量都会在局部变量表中,如果超过其作用域,则会被之后声明的变量复用,如果是引用类型,则会失去引用,被GC。但如果只是超过作用域但是没有被其他变量复用,则不会失去引用。
栈内分配
逃逸分析
用于分析引用类型声明的变量的作用域是否会逃逸出方法体,如果作用域只在方法体内且不返回,则可以标量替换
标量替换
指类引用类型声明时,如果可以被
TLAB
TLAB(Thread Local Allocation Buffer)本地线程分配缓存,在类加载之后分配内存时,如果开启了这个选项,则可以在堆中属于线程的缓存区分配内存,不需要到共享的堆区进行内存申请,避免内存申请失败。开启了这个会使得栈内分配失效
1 | //开启TLAB |
永久代
1 | //指定永久代初始大小 |
元空间
元空间使用的是直接内存
1 | //指定元空间最大大小,默认无限制直到用光系统内存 |
jdk9之前
1 | //打印简单GC日志 |
jdk9、jdk10
1 | //打印简单日志 |
注意:因为GC日志输出时机的原因,显示的数据可能并不准确,有问题的地方需要重新校对
DefNew
:新生代
eden
、 from
、 to
Tenured
:老年代
Perm
:永久代
jdk9之前
1 | -XX:+TraceClassLoading |
jdk9、jdk10
1 | -Xlog:class+load=info |
1 | //配合在控制台使用ctrl+Break展示信息 |
1 | //程序运行时展示手动配置的参数 |