Conflicting collector combinations in option list; please refer to the release notes for the combina

来源:互联网 发布:防盗监控软件 编辑:程序博客网 时间:2024/05/16 06:21

最近在做JVM优化配置时,配置如下:

set "JAVA_OPTS=-Xms512M -Xmx512M -Xmn128M -XX:PermSize=256M -XX:MaxPermSize=256M -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:GCTimeRatio=19 -Xnoclassgc -XX:+DisableExplicitGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=70 -XX:SoftRefLRUPolicyMSPerMB=0"

发现在win7中的一个jvm中可以正常启动,jdk为sun jdk,但是在linux中的一个jvm中,jdk为Open Jdk,出现了如题的异常,猜想应该是两个jvm的GC实现不同。于是,就网上找了下,看到下面的代码就清楚了:

bool Arguments::check_gc_consistency() {  bool status = true;  // Ensure that the user has not selected conflicting sets  // of collectors. [Note: this check is merely a user convenience;  // collectors over-ride each other so that only a non-conflicting  // set is selected; however what the user gets is not what they  // may have expected from the combination they asked for. It's  // better to reduce user confusion by not allowing them to  // select conflicting combinations.  uint i = 0;  if (UseSerialGC)                       i++;  if (UseConcMarkSweepGC || UseParNewGC) i++;  if (UseParallelGC || UseParallelOldGC) i++;  if (UseG1GC)                           i++;  if (i > 1) {    jio_fprintf(defaultStream::error_stream(),                "Conflicting collector combinations in option list; "                "please refer to the release notes for the combinations "                "allowed\n");    status = false;  }  return status;}

看过上面的代码,再看下我的配置项中存在“UseParNewGC”项,终于找到出错的原因了,于是就把该项给去掉了,再次启动,成功!


0 0
原创粉丝点击