< prev index next >

src/hotspot/share/gc/z/zMark.cpp

Print this page

        

*** 131,140 **** --- 131,143 ---- virtual void do_thread(Thread* thread) { // Update thread local address bad mask ZThreadLocalData::set_address_bad_mask(thread, ZAddressBadMask); + // Mark invisible root + ZThreadLocalData::do_invisible_root(thread, ZBarrier::mark_barrier_on_invisible_root_oop_field); + // Retire TLAB ZThreadLocalAllocBuffer::retire(thread); } virtual void do_oop(oop* p) {
*** 154,164 **** public: ZMarkRootsTask(ZMark* mark) : ZTask("ZMarkRootsTask"), _mark(mark), ! _roots(true /* visit_invisible */, false /* visit_jvmti_weak_export */) {} virtual void work() { _roots.oops_do(&_cl); // Flush and free worker stacks. Needed here since --- 157,167 ---- public: ZMarkRootsTask(ZMark* mark) : ZTask("ZMarkRootsTask"), _mark(mark), ! _roots(false /* visit_jvmti_weak_export */) {} virtual void work() { _roots.oops_do(&_cl); // Flush and free worker stacks. Needed here since
*** 280,302 **** const size_t size = entry.partial_array_length() * oopSize; follow_array(addr, size, finalizable); } ! void ZMark::follow_array_object(objArrayOop obj, bool finalizable) { if (finalizable) { ZMarkBarrierOopClosure<true /* finalizable */> cl; cl.do_klass(obj->klass()); } else { ZMarkBarrierOopClosure<false /* finalizable */> cl; cl.do_klass(obj->klass()); } ! const uintptr_t addr = (uintptr_t)obj->base(); ! const size_t size = (size_t)obj->length() * oopSize; ! ! follow_array(addr, size, finalizable); } void ZMark::follow_object(oop obj, bool finalizable) { if (finalizable) { ZMarkBarrierOopClosure<true /* finalizable */> cl; --- 283,306 ---- const size_t size = entry.partial_array_length() * oopSize; follow_array(addr, size, finalizable); } ! void ZMark::follow_array_object(objArrayOop obj, bool follow, bool finalizable) { if (finalizable) { ZMarkBarrierOopClosure<true /* finalizable */> cl; cl.do_klass(obj->klass()); } else { ZMarkBarrierOopClosure<false /* finalizable */> cl; cl.do_klass(obj->klass()); } ! if (follow) { ! const uintptr_t addr = (uintptr_t)obj->base(); ! const size_t size = (size_t)obj->length() * oopSize; ! follow_array(addr, size, finalizable); ! } } void ZMark::follow_object(oop obj, bool finalizable) { if (finalizable) { ZMarkBarrierOopClosure<true /* finalizable */> cl;
*** 346,356 **** // Already marked return; } if (is_array(addr)) { ! follow_array_object(objArrayOop(ZOop::from_address(addr)), finalizable); } else { follow_object(ZOop::from_address(addr), finalizable); } } --- 350,360 ---- // Already marked return; } if (is_array(addr)) { ! follow_array_object(objArrayOop(ZOop::from_address(addr)), entry.follow(), finalizable); } else { follow_object(ZOop::from_address(addr), finalizable); } }
< prev index next >