< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp

Print this page

        

*** 51,60 **** --- 51,61 ---- #include "gc/shenandoah/shenandoahMarkingContext.inline.hpp" #include "gc/shenandoah/shenandoahMemoryPool.hpp" #include "gc/shenandoah/shenandoahMetrics.hpp" #include "gc/shenandoah/shenandoahMonitoringSupport.hpp" #include "gc/shenandoah/shenandoahNormalMode.hpp" + #include "gc/shenandoah/shenandoahObjectMarker.hpp" #include "gc/shenandoah/shenandoahOopClosures.inline.hpp" #include "gc/shenandoah/shenandoahPacer.inline.hpp" #include "gc/shenandoah/shenandoahParallelCleaning.inline.hpp" #include "gc/shenandoah/shenandoahPassiveMode.hpp" #include "gc/shenandoah/shenandoahRootProcessor.inline.hpp"
*** 1274,1283 **** --- 1275,1302 ---- */ void ShenandoahHeap::ensure_parsability(bool retire_tlabs) { // No-op. } + ObjectMarker* ShenandoahHeap::object_marker() { + return new ShenandoahObjectMarker(this, &_aux_bit_map); + } + + bool ShenandoahHeap::commit_aux_bitmap() { + if (!_aux_bitmap_region_special && !os::commit_memory((char*)_aux_bitmap_region.start(), _aux_bitmap_region.byte_size(), false)) { + log_warning(gc)("Could not commit native memory for auxiliary marking bitmap for heap iteration"); + return false; + } + return true; + } + + void ShenandoahHeap::uncommit_aux_bit_map() { + if (!_aux_bitmap_region_special && !os::uncommit_memory((char*)_aux_bitmap_region.start(), _aux_bitmap_region.byte_size())) { + log_warning(gc)("Could not uncommit native memory for auxiliary marking bitmap for heap iteration"); + } + } + /* * Iterates objects in the heap. This is public API, used for, e.g., heap dumping. * * We cannot safely iterate objects by doing a linear scan at random points in time. Linear * scanning needs to deal with dead objects, which may have dead Klass* pointers (e.g.
*** 1291,1304 **** * objects as we mark+traverse through the heap, starting from GC roots. JVMTI IterateThroughHeap * is allowed to report dead objects, but is not required to do so. */ void ShenandoahHeap::object_iterate(ObjectClosure* cl) { assert(SafepointSynchronize::is_at_safepoint(), "safe iteration is only available during safepoints"); ! if (!_aux_bitmap_region_special && !os::commit_memory((char*)_aux_bitmap_region.start(), _aux_bitmap_region.byte_size(), false)) { ! log_warning(gc)("Could not commit native memory for auxiliary marking bitmap for heap iteration"); ! return; ! } // Reset bitmap _aux_bit_map.clear(); Stack<oop,mtGC> oop_stack; --- 1310,1320 ---- * objects as we mark+traverse through the heap, starting from GC roots. JVMTI IterateThroughHeap * is allowed to report dead objects, but is not required to do so. */ void ShenandoahHeap::object_iterate(ObjectClosure* cl) { assert(SafepointSynchronize::is_at_safepoint(), "safe iteration is only available during safepoints"); ! if (!commit_aux_bitmap()) return; // Reset bitmap _aux_bit_map.clear(); Stack<oop,mtGC> oop_stack;
*** 1323,1335 **** obj->oop_iterate(&oops); } assert(oop_stack.is_empty(), "should be empty"); ! if (!_aux_bitmap_region_special && !os::uncommit_memory((char*)_aux_bitmap_region.start(), _aux_bitmap_region.byte_size())) { ! log_warning(gc)("Could not uncommit native memory for auxiliary marking bitmap for heap iteration"); ! } } // Keep alive an object that was loaded with AS_NO_KEEPALIVE. void ShenandoahHeap::keep_alive(oop obj) { if (is_concurrent_mark_in_progress()) { --- 1339,1349 ---- obj->oop_iterate(&oops); } assert(oop_stack.is_empty(), "should be empty"); ! uncommit_aux_bit_map(); } // Keep alive an object that was loaded with AS_NO_KEEPALIVE. void ShenandoahHeap::keep_alive(oop obj) { if (is_concurrent_mark_in_progress()) {
< prev index next >