--- old/src/share/vm/runtime/arguments.cpp 2012-12-21 12:59:46.000000000 +0100 +++ new/src/share/vm/runtime/arguments.cpp 2012-12-21 12:59:45.000000000 +0100 @@ -1083,10 +1083,6 @@ } } -// If the user has chosen ParallelGCThreads > 0, we set UseParNewGC -// if it's not explictly set or unset. If the user has chosen -// UseParNewGC and not explicitly set ParallelGCThreads we -// set it, unless this is a single cpu machine. void Arguments::set_parnew_gc_flags() { assert(!UseSerialGC && !UseParallelOldGC && !UseParallelGC && !UseG1GC, "control point invariant"); @@ -1095,14 +1091,14 @@ // Turn off AdaptiveSizePolicy for parnew until it is complete. disable_adaptive_size_policy("UseParNewGC"); - if (ParallelGCThreads == 0) { - FLAG_SET_DEFAULT(ParallelGCThreads, - Abstract_VM_Version::parallel_worker_threads()); - if (ParallelGCThreads == 1) { - FLAG_SET_DEFAULT(UseParNewGC, false); - FLAG_SET_DEFAULT(ParallelGCThreads, 0); + if (FLAG_IS_DEFAULT(ParallelGCThreads)) { + assert(ParallelGCThreads == 0, "Default value for ParallelGCThreads should be 0"); + uint par_gc_threads = Abstract_VM_Version::parallel_worker_threads(); + if (par_gc_threads > 1) { + FLAG_SET_DEFAULT(ParallelGCThreads, par_gc_threads); } } + if (UseParNewGC) { // By default YoungPLABSize and OldPLABSize are set to 4096 and 1024 respectively, // these settings are default for Parallel Scavenger. For ParNew+Tenured configuration