2011-05-16 95 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

相關問題