-Xss 和 -XX:ThreadStackSize 有什么区别?
我只想控制Java(时髦)应用程序中所有线程的堆栈大小。对于 Hotspot Oracle VM,我知道有两个参数可以做到这一点(-Xss
和 XX:ThreadStackSize
)。
哪个是首选的?它们之间有什么区别吗?关于Open JDK 7,有人在邮件列表中询问,指出对于Hotpot VM来说,这与相同。-Xss
-XX:ThreadStackSize
关键是,我正在测量我的系统上可以启动多少个线程。我的时髦脚本可以做到这一点,看起来像这样:
int count = 0
def printCountThreads = {
println("XXX There were started $count threads.")
}
try {
while(true){
new Thread({Thread.sleep(Integer.MAX_VALUE)}).start()
count++
if(count % 1000 == 0){
printCountThreads()
}
}
} catch (Throwable e){
printCountThreads()
throw e
}
有趣的是,我只是使用-减少了线程的数量。我正在启动时髦的应用程序,其中包含环境变量JAVA_OPTS中的不同内容。XX:ThreadStackSize
groovy countmax-threads.groovy
当我将JAVA_OPTS设置为 时,我得到大约1000个启动的线程,直到内存被消耗。但是,当我使用时,我会得到大约32000个线程,直到出现预期的错误。因此,这似乎根本不起作用。-XX:ThreadStackSize=2m
JAVA_OPTS='-Xss2m'
-Xss
我正在使用
java 版本 “1.8.0_05”
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64 位 Server VM (build 25.5-b02, mixed mode)
在 Ubuntu 14.04 64 位计算机上,具有四个硬件线程和大约 8 GB 的 RAM。
更新:
我在我的Windows 7 64位机器和另一个JDK上重新验证了这一点:
java 版本 “1.8.0_20” Java(TM) SE Runtime Environment (build 1.8.0_20-b26) Java HotSpot(TM) 64 位 Server VM (build 25.20-b23, mixed mode)
并在那里按预期工作(正如一些答案所指出的那样)。所以我想这是一个Linux特定的问题,甚至是JDK版本1.8.05中的一个错误。-Xss
-XX:ThreadStackSize