< prev index next > src/hotspot/share/gc/z/zIterator.inline.hpp
Print this page
#include "gc/z/zIterator.hpp"
#include "gc/z/zVerify.hpp"
#include "memory/iterator.inline.hpp"
#include "oops/objArrayOop.hpp"
+ #include "oops/refArrayOop.hpp"
#include "oops/oop.inline.hpp"
inline bool ZIterator::is_invisible_object(oop obj) {
// This is a good place to make sure that we can't concurrently iterate over
// objects while VMThread operations think they have exclusive access to the
return obj->mark_acquire().is_marked();
}
inline bool ZIterator::is_invisible_object_array(oop obj) {
! return obj->klass()->is_objArray_klass() && is_invisible_object(obj);
}
// This iterator skips invisible object arrays
template <typename OopClosureT>
void ZIterator::oop_iterate_safe(oop obj, OopClosureT* cl) {
return obj->mark_acquire().is_marked();
}
inline bool ZIterator::is_invisible_object_array(oop obj) {
! return obj->klass()->is_refArray_klass() && is_invisible_object(obj);
}
// This iterator skips invisible object arrays
template <typename OopClosureT>
void ZIterator::oop_iterate_safe(oop obj, OopClosureT* cl) {
}
template <typename OopClosureT>
void ZIterator::oop_iterate_range(objArrayOop obj, OopClosureT* cl, int start, int end) {
assert(!is_invisible_object_array(obj), "not safe");
! obj->oop_iterate_range(cl, start, end);
}
template <typename Function>
class ZBasicOopIterateClosure : public BasicOopIterateClosure {
private:
}
template <typename OopClosureT>
void ZIterator::oop_iterate_range(objArrayOop obj, OopClosureT* cl, int start, int end) {
assert(!is_invisible_object_array(obj), "not safe");
! assert(obj->is_refArray(), "Must be");
+ refArrayOop(obj)->oop_iterate_range(cl, start, end);
}
template <typename Function>
class ZBasicOopIterateClosure : public BasicOopIterateClosure {
private:
< prev index next >