在哪里可以findSun / Oracle JVM的默认XSS值?

有没有人发现过一个单独的JVM文档,列出了不同版本的Sun / Oracle JVM和不同OS的default XSS sizes

我已经能够在jrockit jdk 5.0文档中find这张表,但这对于那些使用“普通”Sun / Oracle JVM的用户来说并没有什么帮助。

我很欣赏XSS值会根据操作系统(和JVM版本)而变化,所以也许没有一个文档列出了所有最近的组合。 但是,如果这里的读者知道任何单个文档, 每个 JVM版本的默认XSS值(或者至less1.6和1.5),或者甚至仅仅是某些操作系统,那么这将是一个很好的开始。

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

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

尝试:

 java -XX:+PrintFlagsFinal -version | grep ThreadStackSize 

此信息现在出现在Oracle Hotspot FAQ http://www.oracle.com/technetwork/java/hotspotfaq-138619.html#threads_oom

您可能会遇到线程的默认堆栈大小的问题。 在Java SE 6中,Sparc上的默认值在32位虚拟机中为512k,在64位虚拟机中为1024k。 在x86 Solaris / Linux上,它在32位虚拟机中是320k,在64位虚拟机中是1024k。

在Windows上,从二进制文件(java.exe)中读取默认的线程堆栈大小。 从Java SE 6起,这个值在32位虚拟机中是320k,在64位虚拟机中是1024k。

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

java -server -Xss64k

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

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

您可以在Oracle站点的 “-XX:ThreadStackSize”选项下find它,这意味着与-Xss相同。

对于热点而言,这取决于你的架构,而不是什么。

默认的堆栈大小可以在与给定平台相关的头文件中的源代码中find

谷歌代码search (编辑:这个服务已被停用,因为这个答案是可悲的)更新:这里有一个新的链接从Nebelmann: Openjdk来源:globals_windows_x86.hpp

不知道这是否有帮助,但它是一个开始

IBM Java 6用户指南( 源 )提供了默认设置:

用于Java线程的Xss <size> 32位:

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