所有这些都是特定于操作系统的 – 在OSX的情况下,你有一个每个进程的线程限制,不能超过sysctl kern.num_taskthreads.您创建的线程数限制以及VM创建的线程的开销似乎表明您已达到该限制.
-XX:ThreadStackSize和-Xss< size>之间的区别有点奇怪.在这种情况下,我将我的分析基于OSX oracle java vm(你表明你正在使用不同的VM运行).
-Xss将堆栈大小设置为该字节数.存储它的变量将它除以1024.但是由于它计算它的方式,该值最终为无意义的值(64位jvm,在linux和osx上检查) – 这是一些非常糟糕的溢出数学:
for i in {1..8}; do echo "${i}G:"; java -Xss${i}g -XX:+PrintFlagsFinal -version 2>&1 | grep ' ThreadStack'; done
1G:
intx ThreadStackSize := 1048576 {pd product}
2G:
intx ThreadStackSize := 18014398507384832 {pd product}
3G:
intx ThreadStackSize := 18014398508433408 {pd product}
4G:
intx ThreadStackSize := 0 {pd product}
5G:
intx ThreadStackSize := 1048576 {pd product}
6G:
intx ThreadStackSize := 18014398507384832 {pd product}
7G:
intx ThreadSt