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();