2010-08-23 177 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.