2011-05-16 94 views
42

有没有人发现过不同版本的Sun/Oracle JVM和不同操作系统的单个JVM文档default XSS sizes在哪里可以找到Sun/Oracle JVM的默认XSS值?

我已经能够在jrockit jdk 5.0 docs中找到此表,但这对于那些使用“普通”Sun/Oracle JVM的用户无效。

我的确很欣赏XSS的值因操作系统(和JVM版本)而异,所以也许没有一个文档列出了所有最近的组合。但是,如果任何读者在这里知道任何单独的文件,其中至少只列出各个 JVM版本(或者至少1.6和1.5)的默认XSS值,或者甚至仅仅对于某些 OS,那将是一个很好的开始。

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

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

+0

你读过这http://www.oracle.com/technetwork/java/hotspotfaq-138619.html#threads_oom – Sean 2011-05-16 16:58:01

+1

谢谢,肖恩,但你一定要明白,适用只有1.4。注意我曾要求1.5或1.6的任何参考。这些证明很难找到。对不起,我应该表明我知道1.4技术,就像我引用jrockit 1.5注释一样。 – 2011-05-17 16:19:26

回答

3

对于热点,它取决于你的体系结构,不是什么。

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

google code search(编辑:此服务已禁用,因为这个答案写了,可悲) 更新:这是从Nebelmann一个新的链接:Openjdk source: globals_windows_x86.hpp

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

+1

。 Link broken ... – Pacerier 2012-01-29 14:36:05

+0

对于OpenJDK 7,这里是该文件:http://hg.openjdk.java.net/jdk7/jdk7/hotspot/file/473cce303f13/src/os_cpu/windows_x86/vm/globals_windows_x86.hpp – 2013-01-25 09:00:23

+0

有趣的,格雷格和英格尔。我想有些人可能想探索他们的java源代码来找到它,但是由于许多人没有源代码部署JDK或JRE,这对他们没有任何帮助(除非他们再次获得它,或者找到像你这样的资源共享,并希望他们找到来源于他们的具体环境。)而且,格雷格,我从一开始就承认这确实是针对特定环境的。不过,多亏了你们两个人的考虑。 – 2014-06-20 20:55:14

2

有可用的默认设置从IBM Java 6的用户指南(source):

XSS <大小> Java线程32位:

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

谢谢,chepseskaf,但我又问(在标题和正文中)关于Oracle/Sun JVM的问题。您的资源实际上来自IBM JVM,这不一样。因此,虽然信息很有趣,但我们不能断定它同样适用于Oracle/Sun JVM。 – 2014-06-20 20:52:11

4

你可以找到它at Oracle site下 “-XX:ThreadStackSize”,这意味着相同的-Xss选项。

+0

谢谢你。我确实发现其他人断言并证明xss和threadstacksize似乎是同一件事,只是来自不同时代的jvm进化中的不同名称。 – 2014-06-20 21:06:58

+0

但是至于那个页面对默认的引用,在这种情况下它是非常钝的。 是的,它在左列中列出了-XX:ThreadStackSize = 512,其标题表示该列显示“选项和默认值”,但右列指出“线程堆栈大小(以千字节为单位)”(0表示使用默认值堆栈大小)[Sparc:512; Solaris x86:320(在5.0和更早的版本中是256); Sparc 64位:1024; Linux amd64:1024(在5.0和更早版本中是0);其他所有的都是0.]“ I对Windows主要感兴趣,但不知道“所有其他0”是什么意思,当第一句说“0表示使用默认堆栈大小”时。 :-( – 2014-06-20 21:11:11

+0

根据左栏和标题512是默认值,所以512是Windows。 – keypress 2016-08-30 05:50:09

15

此信息立即出现在甲骨文热点FAQ http://www.oracle.com/technetwork/java/hotspotfaq-138619.html#threads_oom

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

在Windows上,从二进制文件(java.exe)中读取默认线程堆栈大小。从Java SE 6起,此值在32位VM中为320k,在64位VM中为1024k。

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

的java -server -Xss64k

注意,在某些版本的Windows,操作系统使用很粗的粒度可以圆了线程堆栈大小。如果所请求的大小小于默认大小1K或更多,则堆栈大小将被舍入为默认大小;否则,堆栈大小会被舍入为1 MB的倍数。

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

+2

谢谢,本。这是最直接的潜在答案,但有一个小问题:技术说明似乎指的是Java旧版本(“1.4”和“SE 5.0”和“SE 6”),这可能是Java 7或8中的信息不再准确。对这些细节感兴趣的人应该注意到这一点。似乎证实了在Windows中,唯一真正知道的方法的确是从源头上看,善良(至少在他们说出32/64位Windows时至少是好的,至少在Java 6中是如此!) – 2014-06-20 21:18:29

+0

还在寻找任何方式让jvm报告当前的堆栈大小,不能相信这很难获得,特别是考虑到上述所有关于甚至仅仅是找到默认值的情况。有些人可能会提出jmx,但我已经搜索了Java API文档无济于事,有些人可能会建议使用类似的东西e'java -XX:+ PrintFlagsFinal |找到“堆栈”,但只报告在JVM启动时在XX参数上指定了什么值(如果有的话)。它不报告剩下的东西的价值是它的默认值。 – 2014-06-20 21:33:59

49

尝试:

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

,看起来很有希望(对于Windows用户,您可以使用find“ThreadStackSize”),但它仅报告0作为ThreadStackSize的值。我不期望这意味着大小为0。虽然有些人可能会说这表示它使用了“默认”,但是这只会让我们回到我的问题:在给定的JVM中默认的XSS值是多少?我不敢相信这在三年内还不能回答。仍然对任何接受者开放,并感谢所有人尝试到目前为止。 – 2014-12-07 05:41:09

+0

谢谢!这是我得到的64位linux:java -XX:+ PrintFlagsFinal -version | grep的ThreadStackSize 的INTx CompilerThreadStackSize = 0 {Pd乘积} 的INTx ThreadStackSize = 1024 {Pd乘积} 的INTx VMThreadStackSize = 1024 {Pd乘积} Java版本 “1.6.0_24” 的Java(TM)SE运行时环境(建立1.6.0_24 -b07) – Scot 2014-12-29 21:46:00

+0

还是没有人有好答案 – 2015-08-17 10:07:29

相关问题