2010-08-23 40 views
6

我正在使用JDK1.7.0的G1垃圾收集器,但虛擬機無法識別選項G1YoungGenSize。特別是,當我運行:Java虛擬機無法識別-XX:G1YoungGenSize?

java -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1YoungGenSize=512m ... 

我收到以下錯誤:

Unrecognized VM option 'G1YoungGenSize=512m' 
Error: Could not create the Java Virtual Machine. 
Error: A fatal exception has occurred. Program will exit. 

我也有G1YoungGenSize前的「+」號試了一下,因爲有些G1文檔列出這樣的說法:

java -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:+G1YoungGenSize=512m ... 

但是我得到了同樣的錯誤。

我已經嘗試過較老的JDK,包括1.6更新18到21.看起來G1YoungGenSize是通過更新20識別的,並且打破了從21開始並通過最新的1.7版本(快照日期爲2010年8月19日)。

有誰知道什麼可能會導致此錯誤?

+0

請問您可以發佈'java -version'的結果嗎? – 2010-08-24 15:40:17

+0

當然。它的工作原理如下: Java版本「1.6.0_20」 Java™SE運行時環境(版本1.6.0_20-b02) Java HotSpot™64位服務器虛擬機(版本16.3-b01,混合模式) 但它不與任一工作: Java版本 「1.7.0-EA」 的Java(TM)SE運行時環境(建立1.7.0-EA-B106) 的HotSpot的Java(TM)64位服務器VM(構建19.0-B05,混合模式) 和 Java版本 「1.6.0_21」 的Java(TM)SE運行時環境(建立1.6.0_21-B06) 爪哇的HotSpot(TM)服務器VM(17.0構建-b16,混合模式) – 2010-08-25 20:11:16

+0

沒有看源代碼,我的猜測是'G1YoungGenSize'被刪除,可能是暫時的。 '-XX'選項可以做到這一點。 – 2010-08-26 13:26:39

回答

6

這看起來大約6個月前就已經改變了:

6928065:G1:使用現有的命令行參數來設置年輕一代的尺寸 http://hg.openjdk.java.net/jdk7/jdk7/hotspot/rev/a1c410de27e4

1.6此處所做的更改:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6928065

To be consistent with the other GCs, G1 should observe UseAdaptiveSizePolicy to decide whether to auto-tune the young generation size. NewSize/MaxNewSize (and also -Xmn) should dictate the initial max size.