Java Memory Thread Size
作用范围
Thread Size 主要用来控制 JVM 线程栈的大小。
相关参数
Thread Size 主要参数有 4 个,分别介绍一下:
-Xss
线程栈大小,单位 KB
-XX:ThreadStackSize
线程栈大小,单位 KB
-XX:VMThreadStackSize
VMThread 范围内线程栈大小
-XX:CompilerThreadStackSize
编译线程栈大小
使用案例
-Xss256k 代表线程栈大小为 256k。
-XX:ThreadStackSize=256k 代表线程栈大小为 256k。
-XX:VMThreadStackSize=256k 代表 VMThread 线程栈大小为 256k。
-XX:CompilerThreadStackSize=256k 代表编译线程栈大小为 256k。
参数默认值
以下为默认值均为 Linux 平台下的默认值。
参数 | 默认值 | JDK 版本 |
---|---|---|
-XX:Xss | - | - |
-XX:ThreadStackSize | 1024K | jdk1.8 |
-XX:VMThreadStackSize | 1024K | jdk1.8 |
-XX:CompilerThreadStackSize | 0 | jdk1.8 |
注意事项
Linux 下 Xss 线程栈最小值为 228K。
MacOS 下 Xss 线程栈最小值为 160K。
Xss 与 ThreadStackSize 等价。
Xss 会按照 page_size(默认为 4) 对齐。
ThreadStackSize 64 位 OS 下默认值为 1M,32 位 OS 下默认值为 512K。
VMThreadStackSize 64 位 OS 下默认值为 1M,32 位 OS 下默认值为 512K。
CompilerThreadStackSize 64 位 OS 下默认值为 4M,32 位 OS 下默认值为 2M。
Java 线程 new Thread(); 非 Java 线程 GC 线程、VMThread 线程。
实践问题
Xss 设置的比 228K 小会怎样?
程序报错,无法启动 JVM。
$ java -Xss128k Test The stack size specified is too small, Specify at least 228k Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.
同时设置 Xss 和 ThreadStackSize 会怎样?
谁后设置以谁为准。
$ java -Xss512k -XX:ThreadStackSize=256k Test $ jps 6964 Test $ jinfo -flag ThreadStackSize 6964 -XX:ThreadStackSize=256
$ java -XX:ThreadStackSize=256k -Xss512k Test $ jps 6978 Test $ jinfo -flag ThreadStackSize 6978 -XX:ThreadStackSize=512
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!