java - 如何确定 Hotspot VM 默认线程堆栈大小

标签 java jvm jvm-hotspot

如果我像这样从我的 Windows 框的命令行运行 java:

"C:\Program Files (x86)\Java\jdk1.7.0_51\bin\java.exe" -XshowSettings:all -Xss=1m -Xmx256m

我看到了这个输出:

VM settings:
Stack Size: 1.00M
Max. Heap Size: 256.00M
Ergonomics Machine Class: client
Using VM: Java HotSpot(TM) Client VM

对我来说重要的部分是“堆栈大小:1.00M”,这是我通过命令行选项“-Xss1m”设置的。但是,如果我删除此选项并让虚拟机以默认堆栈大小运行,我将得到以下输出:

VM settings:
Max. Heap Size: 256.00M
Ergonomics Machine Class: client
Using VM: Java HotSpot(TM) Client VM

请注意,它不再显示“筹码量”。如果我没有指定自定义“-Xss”值,我希望我能看到默认大小。有什么方法可以确定默认的线程堆栈大小吗?

最佳答案

Windows 应用程序的默认堆栈大小在 .exe 文件头中指定。
您可以使用 Cygwin objdump 工具或 Microsoft Visual Studio dumpbin 实用程序找到它:

C:\Program Files\Java\jdk1.7.0_51\bin> objdump -p java.exe | grep Stack
SizeOfStackReserve      0000000000100000
SizeOfStackCommit       0000000000001000

C:\Program Files\Java\jdk1.7.0_51\bin> dumpbin.exe /headers java.exe | grep stack
      100000 size of stack reserve
        1000 size of stack commit

正如我们所见,Java 7 x64 默认堆栈大小为 0x100000 (1 MB)。
对于 x86 版本,默认堆栈大小为 0x50000 (320 KB):

C:\Program Files (x86)\Java\jre7\bin>objdump -p java.exe | grep Stack
SizeOfStackReserve      00050000
SizeOfStackCommit       00001000

关于java - 如何确定 Hotspot VM 默认线程堆栈大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23552296/

相关文章:

Java Math.atan() 为某些输入返回 0?

java - 将数据从 eclipse 存储到 neo4j

jvm - 不同 JRE 中 JVM 之间的差异

java - G1 GC 是否支持 UseGCOverheadLimit?

java - 使用 Selenium 从 XML 文件填写表单

java - 使用 Spring 按条件验证对象字段

java - Long、Double 和 64 位内存

javascript - VisualVM v1.4.4 中的 OQL - 获取类的字段名称

System.out 中的 Java 执行细节

jboss - JVM经常崩溃