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

Ben*_*nus 5 java jvm jvm-hotspot

如果我从我的Windows框上的命令行运行java,如下所示:

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

我看到这个输出:

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

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

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

请注意,它不再显示"堆栈大小".如果我没有指定自定义的"-Xss"值,我希望能看到默认大小.有没有办法确定默认的线程堆栈大小?

apa*_*gin 3

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

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
Run Code Online (Sandbox Code Playgroud)

我们可以看到,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
Run Code Online (Sandbox Code Playgroud)

  • 只是为了澄清:HotSpot JVM 使用本机操作系统堆栈作为 Java 堆栈。如果未给出“-Xss”,则默认 Java 线程堆栈大小等于 Windows 上的操作系统堆栈大小。 (3认同)