[Q&A] -Xss1m / -XX:ThreadStackSize=512k 啥作用?
指定线程最大栈空间。
jdk1.4里默认的栈大小是256KB
jdk1.5里默认的栈大小为1M
样例1:
配置JVM启动参数:-Xmx20m -Xms20m -Xss1m
-XX:+PrintCommandLineFlags
-XX:ConcGCThreads=3 -XX:G1ConcRefinementThreads=13 -XX:GCDrainStackTargetSize=64 -XX:InitialHeapSize=20971520 -XX:MarkStackSize=4194304 -XX:MaxHeapSize=20971520 -XX:MinHeapSize=20971520 -XX:+PrintCommandLineFlags -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:ThreadStackSize=1024
-XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GC -XX:-UseLargePagesIndividualAllocation
样例2:
配置JVM启动参数: -Xmx20m -Xms20m -XX:ThreadStackSize=512K
-XX:+PrintCommandLineFlags
-XX:ConcGCThreads=3 -XX:G1ConcRefinementThreads=13 -XX:GCDrainStackTargetSize=64 -XX:InitialHeapSize=20971520 -XX:MarkStackSize=4194304 -XX:MaxHeapSize=20971520 -XX:MinHeapSize=20971520 -XX:+PrintCommandLineFlags -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:ThreadStackSize=524288
-XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GC -XX:-UseLargePagesIndividualAllocation
[Q&A] 这个参数对线程的影响?
1、这个参数值越小创建线程数越多。参考: 估算jvm进程的最大线程数
2、这个参数值越大函数可调用的最大深度越大。参照如下代码
public class Jvm4_Xss {
private static int count;
private static void recursion() {
count++;
recursion();
}
public static void main(String[] args) {
try {
recursion();
} catch (Throwable e) {
System.out.println("调用最大深度:" + count);
e.printStackTrace();
}
}
}
------------------------------------------------------------------
//JVM 启动参数
-Xmx20m -Xms20m -Xss1m
//运行结果:
调用最大深度:43909
java.lang.StackOverflowError
at jvm.Jvm4_Xss.recursion(Jvm4_Xss.java:8)
------------------------------------------------------------------
//JVM 启动参数
-Xmx20m -Xms20m -Xss2m
//运行结果:
调用最大深度:103720
java.lang.StackOverflowError
at jvm.Jvm4_Xss.recursion(Jvm4_Xss.java:8)