在哪里可以找到 Oracle JVM 的默认 -Xss(堆栈大小)值?

2022-08-31 13:50:04

有没有人找到一个JVM文档,列出各种版本的Oracle JVM和不同操作系统的默认值?-Xss

我已经能够在jrockit文档中找到这个表,但这对那些使用“正常”Oracle JVM的人来说没有帮助。

我很欣赏每个操作系统(和JVM版本)的值会有所不同,所以也许没有一个文档列出所有最近的组合。但是,如果这里的任何读者都知道任何单独的文档至少只列出了每个JVM版本(或至少1.6和1.5)的默认值,或者即使仅针对某些操作系统,那也将是一个很好的开始。我对Windows的默认值特别感兴趣。-Xss-Xss

我要补充一点,这很有价值的原因是,我们经常看到人们建议(我认为是错误的)某人可以通过改变值来解决问题。但是,如果您不知道自己的默认值,则无法知道您是否通过某人建议的任何更改来提高或降低了该值。他们通常不会指出他们正在使用的版本/操作系统,因此他们的建议是否会“帮助”您是一个废话。-Xss

甚至比某些文档更好的是,如果有人知道查询JVM以获取当前值的方法,无论是从命令行还是通过API调用,那都将更有价值。谢谢。

更新:我添加了自己的答案,总结了各种建议,并指向当前资源(在2021年初),指出了答案,包括我对Windows中-Xss值的了解。


答案 1

尝试:

java -XX:+PrintFlagsFinal -version | grep ThreadStackSize

答案 2

此信息现在显示在 Oracle 热点常见问题解答 http://www.oracle.com/technetwork/java/hotspotfaq-138619.html#threads_oom

您可能遇到线程的默认堆栈大小问题。在 Java SE 6 中,Sparc 上的缺省值在 32 位 VM 中为 512k,在 64 位 VM 中为 1024k。在 x86 Solaris/Linux 上,32 位 VM 中的 320k 和 64 位 VM 中的 1024k。

在 Windows 上,默认线程堆栈大小是从二进制文件 (java.exe) 中读取的。从 Java SE 6 开始,此值在 32 位 VM 中为 320k,在 64 位 VM 中为 1024k。

您可以通过使用 -Xss 选项运行来减小堆栈大小。例如:

java -server -Xss64k

请注意,在某些版本的 Windows 上,操作系统可能会使用非常粗略的粒度来舍入线程堆栈大小。如果请求的大小小于默认大小 1K 或更大,则堆栈大小将向上舍入为默认值;否则,堆栈大小将向上舍入为 1 MB 的倍数。

64k 是每个线程允许的最小堆栈空间量。