。一些人建议使用-XX:+PrintFlagsFinalJVM 参数,这对大多数人来说可能是最好的,但它对 Windows 没有帮助(总是报告 0)。有些人共享各种资源(针对各种 JVM 和版本),其中一些确实试图帮助回答这个问题,但通常没有,或者没有为那些可能在 Windows 上运行 Oracle JVM 的人澄清。

这里至少更清楚一点:Java 11 是(2021 年)Oracle JVM 的当前最新 LTS(长期支持版本)版本,我找到了该当前版本的文档,其中列出了特定的默认值XSS(又名 ThreadStackSize),适用于不同的操作系统。它位于https://docs.oracle.com/en/java/javase/11/tools/java.html#GUID-3B1CE181-CD30-4178-9602-230B800D4FAE。这是它报告的内容(以防将来链接中断):

Linux/x64(64 位):1024 KBmacOS(64 位):1024 KBOracle Solaris/x64(64 位):1024 KBWindows:默认值取决于虚拟内存

可悲的是,Windows 人员仍然想知道:这意味着什么,“取决于虚拟内存”?我想这当然是指 Windows 本身的虚拟内存,但即便如此,我们如何将其转换为我们应该期望的 jvm 线程的实际堆栈大小?

回到我最初的问题:我想知道默认值是什么,因为经常有人可能会建议解决某些问题的方法是更改​​该-XSSjvm arg(他们会建议的某个值)。但是我们怎么知道我们是让它比默认值更大还是更小呢?根据要解决的问题,了解这一点至关重要!

10年后,我想这是一个可能无法完成的神话般的探索。但是谁知道呢,也许现在或将来有人看到这个可能会带着新信息来救援。或者 Java 17(预期的下一个 LTS 版本)可能会改变一些事情。(需要明确的是,在我写的时候,我共享的那个页面没有 Java 13 或更高版本的版本。)

如果没有别的,我把这个留给后代,至少帮助其他面临这个问题的人知道他们并不疯狂地发现很难得到一个直接的答案(尤其是关于 Windows 的默认 XSS 值,以及是否改变它将相对于默认值提高或降低大小)。