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

btqmn9zl  于 2022-11-07  发布在  Oracle
关注(0)|答案(6)|浏览(172)

有没有人曾经找到过一个JVM文档,其中列出了不同版本的Oracle JVM和不同操作系统的默认-Xss值?
我已经能够在jrockit文档中找到此表,但这对使用“普通”Oracle JVM的用户没有帮助。
我很欣赏-Xss值会因操作系统而异(和JVM版本),所以可能没有一个文档列出所有最近的组合。(或者至少是1.6和1.5),或者即使只是对 * 一些 * 操作系统来说,这也是一个很好的开始。
我还要补充一点,它之所以有价值,是因为我们经常看到人们推荐(我认为这是错误的)有人可以通过改变-Xss的值来解决问题。但是如果你不知道你的默认值,那么就没有办法知道你是通过别人建议的任何改变来提高还是降低这个值。他们通常不会指出他们所使用的版本/操作系统,所以他们的建议是否会“帮助”你是一个未知数。
甚至比一些文档更好的是,如果有人知道一种方法来查询JVM以获得当前值,无论是从命令行还是通过API调用,这将是更有价值的。

更新:我添加了an answer of my own,它总结了各种建议,并指出了当前资源(2021年初)的答案,包括我在Windows中了解到的-Xss值。

dtcbnfnu

dtcbnfnu1#

尝试:

java -XX:+PrintFlagsFinal -version | grep ThreadStackSize
beq87vna

beq87vna2#

此信息现在出现在Oracle热点常见问题解答www.example.com中http://www.oracle.com/technetwork/java/hotspotfaq-138619.html#threads_oom
您可能遇到了线程的默认堆栈大小问题。在Java SE 6中,Sparc的默认值在32位VM中为512 k,在64位VM中为1024 k。在x86 Solaris/Linux中,32位VM中为320 k,在64位VM中为1024 k。
在Windows上,默认线程堆栈大小从二进制文件(java.exe)中读取。从Java SE 6开始,此值在32位VM中为320 k,在64位VM中为1024 k。
您可以使用-Xss选项来执行,以减少堆栈大小。例如:
Java -服务器-Xss 64 k
请注意,在某些版本的Windows上,操作系统可能会使用非常粗糙的粒度向上取整线程堆栈大小。如果请求的大小比默认大小小1 K或更多,则堆栈大小将向上取整为默认值;否则,堆栈大小将向上舍入为1 MB的倍数。
64 k是每个线程允许的最小堆栈空间量。

sg3maiej

sg3maiej3#

这个问题的答案是在2011年首次发布的,从那以后的几年里得到了各种各样的答案,这是一个多么漫长而奇怪的旅程啊。(总是报告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千字节
  • macOS(64位):1024千字节
  • Oracle Solaris/x64(64位):1024千字节
  • Windows:默认值取决于虚拟内存

遗憾的是,Windows用户仍然在想:“依赖于虚拟内存”是什么意思呢?我想它当然是指Windows本身的虚拟内存,但即使这样,我们如何将其转换为我们应该期望的JVM线程的实际堆栈大小呢?
回到我最初的问题:我想知道default是什么,因为经常有人会建议解决一些问题的方法是改变-XSS jvm参数(到他们建议的某个值)。但是我们怎么知道我们是把它设置得比默认值大还是小呢?根据要解决的问题,这一点是至关重要的!
10年过去了,我想这是一个神话般的探索,可能不会有结果。但谁知道呢,也许有人现在或将来看到这一点,可能会带着新的信息来拯救我们。或者,也许Java 17(预期的下一个LTS版本)可能会改变事情。(需要说明的是,在我写这篇文章的时候,我分享的那个页面没有Java 13或更高版本。)
如果没有别的,我把这个留给后人,至少可以帮助其他面对这个问题的人知道,他们发现很难得到一个直接的答案并不是疯狂的(特别是关于Windows的默认XSS值,以及改变它是否会相对于默认值增加或减少大小)。

rpppsulh

rpppsulh4#

您可以在“-XX:ThreadStackSize”选项下找到它at Oracle site,该选项与-Xss的含义相同。

snz8szmq

snz8szmq5#

对于热点,这取决于你的架构和什么不。
默认堆栈大小可以在与给定平台相关的头文件中的源代码中找到,例如
谷歌代码搜索 (编辑:遗憾的是,自从做出这个回答以来,该服务已被停用) 更新:以下是Nebelmann提供新链接:Openjdk source: globals_windows_x86.hpp
不确定这是否有帮助,但这是一个开始

ttcibm8c

ttcibm8c6#

IBM Java 6用户指南(source)中提供了以下默认设置:

**Xss **适用于Java线程32位:

AIX®: 256KB
IBM®I: 256KB
Linux: 256KB
Windows: 256KB
z/OS®: 256KB

相关问题