--- old/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp 2012-12-21 12:59:44.000000000 +0100 +++ new/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp 2012-12-21 12:59:44.000000000 +0100 @@ -1625,5 +1625,5 @@ } bool ParNewGeneration::in_use() { - return UseParNewGC && ParallelGCThreads > 0; + return UseParNewGC; } --- old/src/share/vm/memory/collectorPolicy.cpp 2012-12-21 12:59:44.000000000 +0100 +++ new/src/share/vm/memory/collectorPolicy.cpp 2012-12-21 12:59:44.000000000 +0100 @@ -818,7 +818,7 @@ if (_generations == NULL) vm_exit_during_initialization("Unable to allocate gen spec"); - if (UseParNewGC && ParallelGCThreads > 0) { + if (UseParNewGC) { _generations[0] = new GenerationSpec(Generation::ParNew, _initial_gen0_size, _max_gen0_size); } else { _generations[0] = new GenerationSpec(Generation::DefNew, _initial_gen0_size, _max_gen0_size); @@ -831,10 +831,9 @@ void MarkSweepPolicy::initialize_gc_policy_counters() { // initialize the policy counters - 2 collectors, 3 generations - if (UseParNewGC && ParallelGCThreads > 0) { + if (UseParNewGC) { _gc_policy_counters = new GCPolicyCounters("ParNew:MSC", 2, 3); - } - else { + } else { _gc_policy_counters = new GCPolicyCounters("Copy:MSC", 2, 3); } } --- old/src/share/vm/memory/tenuredGeneration.cpp 2012-12-21 12:59:45.000000000 +0100 +++ new/src/share/vm/memory/tenuredGeneration.cpp 2012-12-21 12:59:45.000000000 +0100 @@ -62,7 +62,7 @@ _virtual_space.reserved_size(), _the_space, _gen_counters); #ifndef SERIALGC - if (UseParNewGC && ParallelGCThreads > 0) { + if (UseParNewGC) { typedef ParGCAllocBufferWithBOT* ParGCAllocBufferWithBOTPtr; _alloc_buffers = NEW_C_HEAP_ARRAY(ParGCAllocBufferWithBOTPtr, ParallelGCThreads, mtGC); --- 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