src/share/vm/runtime/arguments.cpp

Print this page
rev 3708 : 8000244: G1: Ergonomically set MarkStackSize and use virtual space for global marking stack
Summary: Set the value of MarkStackSize to a value based on the number of parallel marking threads with a reasonable minimum. Expand the marking stack if we have to restart marking due to an overflow up to a reasonable maximum. Allocate the underlying space for the marking stack from virtual memory.
Reviewed-by: jmasa

*** 1500,1516 **** if (ParallelGCThreads == 0) { FLAG_SET_DEFAULT(ParallelGCThreads, Abstract_VM_Version::parallel_worker_threads()); } ! if (FLAG_IS_DEFAULT(MarkStackSize)) { ! FLAG_SET_DEFAULT(MarkStackSize, 128 * TASKQUEUE_SIZE); ! } ! if (PrintGCDetails && Verbose) { ! tty->print_cr("MarkStackSize: %uk MarkStackSizeMax: %uk", ! MarkStackSize / K, MarkStackSizeMax / K); ! tty->print_cr("ConcGCThreads: %u", ConcGCThreads); } if (FLAG_IS_DEFAULT(GCTimeRatio) || GCTimeRatio == 0) { // In G1, we want the default GC overhead goal to be higher than // say in PS. So we set it here to 10%. Otherwise the heap might --- 1500,1515 ---- if (ParallelGCThreads == 0) { FLAG_SET_DEFAULT(ParallelGCThreads, Abstract_VM_Version::parallel_worker_threads()); } ! // MarkStackSize will be set (if it hasn't been set by the user) ! // when concurrent marking is initialized. ! // Its value will be based upon the number of parallel marking threads. ! // But we do set the maximum mark stack size here. ! if (FLAG_IS_DEFAULT(MarkStackSizeMax)) { ! FLAG_SET_DEFAULT(MarkStackSizeMax, 128 * TASKQUEUE_SIZE); } if (FLAG_IS_DEFAULT(GCTimeRatio) || GCTimeRatio == 0) { // In G1, we want the default GC overhead goal to be higher than // say in PS. So we set it here to 10%. Otherwise the heap might
*** 1518,1527 **** --- 1517,1532 ---- // fact, even 10% seems to not be high enough in some cases // (especially small GC stress tests that the main thing they do // is allocation). We might consider increase it further. FLAG_SET_DEFAULT(GCTimeRatio, 9); } + + if (PrintGCDetails && Verbose) { + tty->print_cr("MarkStackSize: %uk MarkStackSizeMax: %uk", + MarkStackSize / K, MarkStackSizeMax / K); + tty->print_cr("ConcGCThreads: %u", ConcGCThreads); + } } void Arguments::set_heap_size() { if (!FLAG_IS_DEFAULT(DefaultMaxRAMFraction)) { // Deprecated flag
*** 1976,1985 **** --- 1981,1993 ---- status = status && verify_object_alignment(); status = status && verify_min_value(ClassMetaspaceSize, 1*M, "ClassMetaspaceSize"); + status = status && verify_interval(MarkStackSizeMax, + 1, (max_jint - 1), "MarkStackSizeMax"); + #ifdef SPARC if (UseConcMarkSweepGC || UseG1GC) { // Issue a stern warning if the user has explicitly set // UseMemSetInBOT (it is known to cause issues), but allow // use for experimentation and debugging.