< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahArguments.cpp

Print this page

        

*** 34,44 **** void ShenandoahArguments::initialize() { #if !(defined AARCH64 || defined AMD64 || defined IA32) vm_exit_during_initialization("Shenandoah GC is not supported on this platform."); #endif ! #if 0 // leave this block as stepping stone for future platforms log_warning(gc)("Shenandoah GC is not fully supported on this platform:"); log_warning(gc)(" concurrent modes are not supported, only STW cycles are enabled;"); log_warning(gc)(" arch-specific barrier code is not implemented, disabling barriers;"); FLAG_SET_DEFAULT(ShenandoahGCHeuristics, "passive"); --- 34,44 ---- void ShenandoahArguments::initialize() { #if !(defined AARCH64 || defined AMD64 || defined IA32) vm_exit_during_initialization("Shenandoah GC is not supported on this platform."); #endif ! #ifdef IA32 log_warning(gc)("Shenandoah GC is not fully supported on this platform:"); log_warning(gc)(" concurrent modes are not supported, only STW cycles are enabled;"); log_warning(gc)(" arch-specific barrier code is not implemented, disabling barriers;"); FLAG_SET_DEFAULT(ShenandoahGCHeuristics, "passive");
*** 65,102 **** if (FLAG_IS_DEFAULT(UseNUMA)) { FLAG_SET_DEFAULT(UseNUMA, true); FLAG_SET_DEFAULT(UseNUMAInterleaving, true); } ! // Set up default number of concurrent threads. We want to have cycles complete fast ! // enough, but we also do not want to steal too much CPU from the concurrently running ! // application. Using 1/4 of available threads for concurrent GC seems a good ! // compromise here. ! if (FLAG_IS_DEFAULT(ConcGCThreads)) { ! FLAG_SET_DEFAULT(ConcGCThreads, MAX2(1, os::processor_count() / 4)); ! } ! if (ConcGCThreads == 0) { ! vm_exit_during_initialization("Shenandoah expects ConcGCThreads > 0, check -XX:ConcGCThreads=#"); ! } ! ! // Set up default number of parallel threads. We want to have decent pauses performance ! // which would use parallel threads, but we also do not want to do too many threads ! // that will overwhelm the OS scheduler. Using 1/2 of available threads seems to be a fair ! // compromise here. Due to implementation constraints, it should not be lower than ! // the number of concurrent threads. ! if (FLAG_IS_DEFAULT(ParallelGCThreads)) { ! FLAG_SET_DEFAULT(ParallelGCThreads, MAX2(1, os::processor_count() / 2)); ! } ! ! if (ParallelGCThreads == 0) { ! vm_exit_during_initialization("Shenandoah expects ParallelGCThreads > 0, check -XX:ParallelGCThreads=#"); ! } ! ! if (ParallelGCThreads < ConcGCThreads) { ! warning("Shenandoah expects ConcGCThreads <= ParallelGCThreads, adjusting ParallelGCThreads automatically"); ! FLAG_SET_DEFAULT(ParallelGCThreads, ConcGCThreads); } if (FLAG_IS_DEFAULT(ParallelRefProcEnabled)) { FLAG_SET_DEFAULT(ParallelRefProcEnabled, true); } --- 65,80 ---- if (FLAG_IS_DEFAULT(UseNUMA)) { FLAG_SET_DEFAULT(UseNUMA, true); FLAG_SET_DEFAULT(UseNUMAInterleaving, true); } ! FLAG_SET_DEFAULT(ParallelGCThreads, ! WorkerPolicy::parallel_worker_threads()); ! if (FLAG_IS_DEFAULT(ConcGCThreads)) { ! uint conc_threads = MAX2((uint) 1, ParallelGCThreads); ! FLAG_SET_DEFAULT(ConcGCThreads, conc_threads); } if (FLAG_IS_DEFAULT(ParallelRefProcEnabled)) { FLAG_SET_DEFAULT(ParallelRefProcEnabled, true); }
< prev index next >