gpt4 book ai didi

java - -Xss 和 -XX :ThreadStackSize? 有什么区别

转载 作者:搜寻专家 更新时间:2023-10-30 20:00:11 26 4
gpt4 key购买 nike

我只想控制 Java (groovy) 应用程序中所有线程的堆栈大小。对于 Hotspot Oracle VM,我知道有两个参数( -XssXX:ThreadStackSize )。

哪个是首选?它们之间有什么区别吗?关于 Open JDK 7 someone asked on the mailing list ,声明 -Xss 对于 Hotpot VM 与 -XX:ThreadStackSize 相同。

重点是,我正在测量可以在我的系统上启动多少线程。我的 groovy 脚本看起来像这样:

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
}

有趣的是,我只是使用 -XX:ThreadStackSize 减少了线程数。我正在使用环境变量 JAVA_OPTS 中的不同内容启动 groovy 应用程序。

groovy countmax-threads.groovy

当我将 JAVA_OPTS 设置为 -XX:ThreadStackSize=2m 时,我得到大约 1000 个启动线程,直到内存被消耗。但是,当我使用 JAVA_OPTS='-Xss2m' 时,我得到大约 32000 个线程,直到出现预期的错误。所以看起来 -Xss 根本不起作用。

我正在使用

java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)

在具有四个硬件线程和大约 8 GB RAM 的 Ubuntu 14.04 64 位机器上。

更新:

我在我的 Windows 7 64 位机器和另一个 JDK 上重新验证了这一点:

java version "1.8.0_20" Java(TM) SE Runtime Environment (build 1.8.0_20-b26) Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)

还有 -Xss-XX:ThreadStackSize 按预期工作(正如一些答案指出的那样)。所以我想这是 Linux 特定的问题,甚至是 JDK 1.8.05 版中的错误。

最佳答案

-Xss-XX:ThreadStackSize 的别名,适用于 OpenJDK 和 Oracle JDK。

尽管他们以不同的方式解析参数:
-Xss 可以接受带有 K、M 或 G 后缀的数字;
-XX:ThreadStackSize= 需要一个整数(无后缀)- 以千字节为单位的堆栈大小。

关于java - -Xss 和 -XX :ThreadStackSize? 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28767905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com