src/share/vm/gc_implementation/g1/g1CollectedHeap.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

*** 2077,2095 **** // evacuation pause. clear_cset_fast_test(); // Create the ConcurrentMark data structure and thread. // (Must do this late, so that "max_regions" is defined.) ! _cm = new ConcurrentMark(heap_rs, max_regions()); _cmThread = _cm->cmThread(); // Initialize the from_card cache structure of HeapRegionRemSet. HeapRegionRemSet::init_heap(max_regions()); // Now expand into the initial heap size. if (!expand(init_byte_size)) { ! vm_exit_during_initialization("Failed to allocate initial heap."); return JNI_ENOMEM; } // Perform any initialization actions delegated to the policy. g1_policy()->init(); --- 2077,2099 ---- // evacuation pause. clear_cset_fast_test(); // Create the ConcurrentMark data structure and thread. // (Must do this late, so that "max_regions" is defined.) ! _cm = new ConcurrentMark(this, heap_rs); ! if (_cm == NULL || !_cm->completed_initialization()) { ! vm_shutdown_during_initialization("Could not create/initialize ConcurrentMark"); ! return JNI_ENOMEM; ! } _cmThread = _cm->cmThread(); // Initialize the from_card cache structure of HeapRegionRemSet. HeapRegionRemSet::init_heap(max_regions()); // Now expand into the initial heap size. if (!expand(init_byte_size)) { ! vm_shutdown_during_initialization("Failed to allocate initial heap."); return JNI_ENOMEM; } // Perform any initialization actions delegated to the policy. g1_policy()->init();