src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hs-gc-chunked-growablearray Cdiff src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp

src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp

Print this page

        

*** 35,44 **** --- 35,45 ---- #include "gc_implementation/g1/g1EvacFailure.hpp" #include "gc_implementation/g1/g1GCPhaseTimes.hpp" #include "gc_implementation/g1/g1Log.hpp" #include "gc_implementation/g1/g1MarkSweep.hpp" #include "gc_implementation/g1/g1OopClosures.inline.hpp" + #include "gc_implementation/g1/g1PreservedMarksQueue.hpp" #include "gc_implementation/g1/g1RemSet.inline.hpp" #include "gc_implementation/g1/heapRegion.inline.hpp" #include "gc_implementation/g1/heapRegionRemSet.hpp" #include "gc_implementation/g1/heapRegionSeq.inline.hpp" #include "gc_implementation/g1/vm_operations_g1.hpp"
*** 1891,1901 **** _is_alive_closure_stw(this), _ref_processor_cm(NULL), _ref_processor_stw(NULL), _process_strong_tasks(new SubTasksDone(G1H_PS_NumElements)), _bot_shared(NULL), ! _objs_with_preserved_marks(NULL), _preserved_marks_of_objs(NULL), _evac_failure_scan_stack(NULL) , _mark_in_progress(false), _cg1r(NULL), _summary_bytes_used(0), _g1mm(NULL), _refine_cte_cl(NULL), --- 1892,1902 ---- _is_alive_closure_stw(this), _ref_processor_cm(NULL), _ref_processor_stw(NULL), _process_strong_tasks(new SubTasksDone(G1H_PS_NumElements)), _bot_shared(NULL), ! _preserved_marks(40, 10000), _evac_failure_scan_stack(NULL) , _mark_in_progress(false), _cg1r(NULL), _summary_bytes_used(0), _g1mm(NULL), _refine_cte_cl(NULL),
*** 4213,4237 **** reset_cset_heap_region_claim_values(); assert(check_cset_heap_region_claim_values(HeapRegion::InitialClaimValue), "sanity"); // Now restore saved marks, if any. ! if (_objs_with_preserved_marks != NULL) { ! assert(_preserved_marks_of_objs != NULL, "Both or none."); ! guarantee(_objs_with_preserved_marks->length() == ! _preserved_marks_of_objs->length(), "Both or none."); ! for (int i = 0; i < _objs_with_preserved_marks->length(); i++) { ! oop obj = _objs_with_preserved_marks->at(i); ! markOop m = _preserved_marks_of_objs->at(i); ! obj->set_mark(m); ! } ! ! // Delete the preserved marks growable arrays (allocated on the C heap). ! delete _objs_with_preserved_marks; ! delete _preserved_marks_of_objs; ! _objs_with_preserved_marks = NULL; ! _preserved_marks_of_objs = NULL; } } void G1CollectedHeap::push_on_evac_failure_scan_stack(oop obj) { _evac_failure_scan_stack->push(obj); --- 4214,4226 ---- reset_cset_heap_region_claim_values(); assert(check_cset_heap_region_claim_values(HeapRegion::InitialClaimValue), "sanity"); // Now restore saved marks, if any. ! while (_preserved_marks.has_data()) { ! G1PreservedMarksQueueEntry e = _preserved_marks.remove_first(); ! e.obj->set_mark(e.mark); } } void G1CollectedHeap::push_on_evac_failure_scan_stack(oop obj) { _evac_failure_scan_stack->push(obj);
*** 4311,4329 **** void G1CollectedHeap::preserve_mark_if_necessary(oop obj, markOop m) { assert(evacuation_failed(), "Oversaving!"); // We want to call the "for_promotion_failure" version only in the // case of a promotion failure. if (m->must_be_preserved_for_promotion_failure(obj)) { ! if (_objs_with_preserved_marks == NULL) { ! assert(_preserved_marks_of_objs == NULL, "Both or none."); ! _objs_with_preserved_marks = ! new (ResourceObj::C_HEAP, mtGC) GrowableArray<oop>(40, true); ! _preserved_marks_of_objs = ! new (ResourceObj::C_HEAP, mtGC) GrowableArray<markOop>(40, true); ! } ! _objs_with_preserved_marks->push(obj); ! _preserved_marks_of_objs->push(m); } } HeapWord* G1CollectedHeap::par_allocate_during_gc(GCAllocPurpose purpose, size_t word_size) { --- 4300,4310 ---- void G1CollectedHeap::preserve_mark_if_necessary(oop obj, markOop m) { assert(evacuation_failed(), "Oversaving!"); // We want to call the "for_promotion_failure" version only in the // case of a promotion failure. if (m->must_be_preserved_for_promotion_failure(obj)) { ! _preserved_marks.append(obj, m); } } HeapWord* G1CollectedHeap::par_allocate_during_gc(GCAllocPurpose purpose, size_t word_size) {
src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File