< prev index next >
src/share/vm/gc/g1/g1CollectedHeap.cpp
Print this page
rev 13232 : imported patch parallel-fullgc-stefanj
rev 13237 : imported patch 8183226-periodic-rem-set-summary-accesses-uninitialized-stuff
@@ -1682,18 +1682,10 @@
// Ensure that the sizes are properly aligned.
Universe::check_alignment(init_byte_size, HeapRegion::GrainBytes, "g1 heap");
Universe::check_alignment(max_byte_size, HeapRegion::GrainBytes, "g1 heap");
Universe::check_alignment(max_byte_size, heap_alignment, "g1 heap");
- _refine_cte_cl = new RefineCardTableEntryClosure();
-
- jint ecode = JNI_OK;
- _cg1r = ConcurrentG1Refine::create(_refine_cte_cl, &ecode);
- if (_cg1r == NULL) {
- return ecode;
- }
-
// Reserve the maximum.
// When compressed oops are enabled, the preferred heap base
// is calculated by subtracting the requested size from the
// 32Gb boundary and using the result as the base address for
@@ -1718,13 +1710,10 @@
set_barrier_set(bs);
// Create the hot card cache.
_hot_card_cache = new G1HotCardCache(this);
- // Also create a G1 rem set.
- _g1_rem_set = new G1RemSet(this, g1_barrier_set(), _hot_card_cache);
-
// Carve out the G1 part of the heap.
ReservedSpace g1_rs = heap_rs.first_part(max_byte_size);
size_t page_size = UseLargePages ? os::large_page_size() : os::vm_page_size();
G1RegionToSpaceMapper* heap_storage =
G1RegionToSpaceMapper::create_mapper(g1_rs,
@@ -1772,11 +1761,13 @@
// 6843694 - ensure that the maximum region index can fit
// in the remembered set structures.
const uint max_region_idx = (1U << (sizeof(RegionIdx_t)*BitsPerByte-1)) - 1;
guarantee((max_regions() - 1) <= max_region_idx, "too many regions");
- g1_rem_set()->initialize(max_capacity(), max_regions());
+ // Also create a G1 rem set.
+ _g1_rem_set = new G1RemSet(this, g1_barrier_set(), _hot_card_cache);
+ _g1_rem_set->initialize(max_capacity(), max_regions());
size_t max_cards_per_region = ((size_t)1 << (sizeof(CardIdx_t)*BitsPerByte-1)) - 1;
guarantee(HeapRegion::CardsPerRegion > 0, "make sure it's initialized");
guarantee(HeapRegion::CardsPerRegion < max_cards_per_region,
"too many cards per region");
@@ -1815,10 +1806,18 @@
JavaThread::satb_mark_queue_set().initialize(SATB_Q_CBL_mon,
SATB_Q_FL_lock,
G1SATBProcessCompletedThreshold,
Shared_SATB_Q_lock);
+ _refine_cte_cl = new RefineCardTableEntryClosure();
+
+ jint ecode = JNI_OK;
+ _cg1r = ConcurrentG1Refine::create(_refine_cte_cl, &ecode);
+ if (_cg1r == NULL) {
+ return ecode;
+ }
+
JavaThread::dirty_card_queue_set().initialize(_refine_cte_cl,
DirtyCardQ_CBL_mon,
DirtyCardQ_FL_lock,
(int)concurrent_g1_refine()->yellow_zone(),
(int)concurrent_g1_refine()->red_zone(),
@@ -1857,10 +1856,12 @@
_preserved_marks_set.init(ParallelGCThreads);
_collection_set.initialize(max_regions());
+ _g1_rem_set->initialize_periodic_summary_info();
+
return JNI_OK;
}
void G1CollectedHeap::stop() {
// Stop all concurrent threads. We do this to make sure these threads
< prev index next >