< prev index next >
src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
Print this page
@@ -1768,10 +1768,15 @@
_gc_tracer_stw(new (ResourceObj::C_HEAP, mtGC) G1NewTracer()),
_gc_tracer_cm(new (ResourceObj::C_HEAP, mtGC) G1OldTracer()) {
_g1h = this;
+ _workers = new FlexibleWorkGang("GC Thread", ParallelGCThreads,
+ /* are_GC_task_threads */true,
+ /* are_ConcurrentGC_threads */false);
+ _workers->initialize_workers();
+
_allocator = G1Allocator::create_allocator(_g1h);
_humongous_object_threshold_in_words = HeapRegion::GrainWords / 2;
int n_queues = MAX2((int)ParallelGCThreads, 1);
_task_queues = new RefToScanQueueSet(n_queues);
@@ -2033,10 +2038,15 @@
size_t G1CollectedHeap::conservative_max_heap_alignment() {
return HeapRegion::max_region_size();
}
+void G1CollectedHeap::post_initialize() {
+ CollectedHeap::post_initialize();
+ ref_processing_init();
+}
+
void G1CollectedHeap::ref_processing_init() {
// Reference processing in G1 currently works as follows:
//
// * There are two reference processor instances. One is
// used to record and process discovered references
@@ -2069,11 +2079,10 @@
// * References are processed near the end of a STW evacuation pause.
// * For both types of GC:
// * Discovery is atomic - i.e. not concurrent.
// * Reference discovery will not need a barrier.
- SharedHeap::ref_processing_init();
MemRegion mr = reserved_region();
// Concurrent Mark ref processor
_ref_processor_cm =
new ReferenceProcessor(mr, // span
@@ -2461,15 +2470,10 @@
}
return false;
}
};
-void G1CollectedHeap::oop_iterate(ExtendedOopClosure* cl) {
- IterateOopClosureRegionClosure blk(cl);
- heap_region_iterate(&blk);
-}
-
// Iterates an ObjectClosure over all objects within a HeapRegion.
class IterateObjectClosureRegionClosure: public HeapRegionClosure {
ObjectClosure* _cl;
public:
@@ -2485,27 +2489,10 @@
void G1CollectedHeap::object_iterate(ObjectClosure* cl) {
IterateObjectClosureRegionClosure blk(cl);
heap_region_iterate(&blk);
}
-// Calls a SpaceClosure on a HeapRegion.
-
-class SpaceClosureRegionClosure: public HeapRegionClosure {
- SpaceClosure* _cl;
-public:
- SpaceClosureRegionClosure(SpaceClosure* cl) : _cl(cl) {}
- bool doHeapRegion(HeapRegion* r) {
- _cl->do_space(r);
- return false;
- }
-};
-
-void G1CollectedHeap::space_iterate(SpaceClosure* cl) {
- SpaceClosureRegionClosure blk(cl);
- heap_region_iterate(&blk);
-}
-
void G1CollectedHeap::heap_region_iterate(HeapRegionClosure* cl) const {
_hrm.iterate(cl);
}
void
@@ -2638,27 +2625,23 @@
result = _hrm.next_region_in_heap(result);
}
return result;
}
-Space* G1CollectedHeap::space_containing(const void* addr) const {
- return heap_region_containing(addr);
-}
-
HeapWord* G1CollectedHeap::block_start(const void* addr) const {
- Space* sp = space_containing(addr);
- return sp->block_start(addr);
+ HeapRegion* hr = heap_region_containing(addr);
+ return hr->block_start(addr);
}
size_t G1CollectedHeap::block_size(const HeapWord* addr) const {
- Space* sp = space_containing(addr);
- return sp->block_size(addr);
+ HeapRegion* hr = heap_region_containing(addr);
+ return hr->block_size(addr);
}
bool G1CollectedHeap::block_is_obj(const HeapWord* addr) const {
- Space* sp = space_containing(addr);
- return sp->block_is_obj(addr);
+ HeapRegion* hr = heap_region_containing(addr);
+ return hr->block_is_obj(addr);
}
bool G1CollectedHeap::supports_tlab_allocation() const {
return true;
}
< prev index next >