< 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 >