46 }
47
48 _map.set_bit(index);
49 return true;
50 }
51 };
52
53 class ZHeapIteratorRootOopClosure : public OopClosure {
54 private:
55 ZHeapIterator* const _iter;
56 ObjectClosure* const _cl;
57
58 public:
59 ZHeapIteratorRootOopClosure(ZHeapIterator* iter, ObjectClosure* cl) :
60 _iter(iter),
61 _cl(cl) {}
62
63 virtual void do_oop(oop* p) {
64 // Load barrier needed here for the same reason we
65 // need fixup_partial_loads() in ZHeap::mark_end()
66 const oop obj = RootAccess<>::oop_load(p);
67 _iter->push(obj);
68 _iter->drain(_cl);
69 }
70
71 virtual void do_oop(narrowOop* p) {
72 ShouldNotReachHere();
73 }
74 };
75
76 class ZHeapIteratorPushOopClosure : public ExtendedOopClosure {
77 private:
78 ZHeapIterator* const _iter;
79 const oop _base;
80
81 public:
82 ZHeapIteratorPushOopClosure(ZHeapIterator* iter, oop base) :
83 _iter(iter),
84 _base(base) {}
85
86 void do_oop_nv(oop* p) {
|
46 }
47
48 _map.set_bit(index);
49 return true;
50 }
51 };
52
53 class ZHeapIteratorRootOopClosure : public OopClosure {
54 private:
55 ZHeapIterator* const _iter;
56 ObjectClosure* const _cl;
57
58 public:
59 ZHeapIteratorRootOopClosure(ZHeapIterator* iter, ObjectClosure* cl) :
60 _iter(iter),
61 _cl(cl) {}
62
63 virtual void do_oop(oop* p) {
64 // Load barrier needed here for the same reason we
65 // need fixup_partial_loads() in ZHeap::mark_end()
66 const oop obj = NativeAccess<>::oop_load(p);
67 _iter->push(obj);
68 _iter->drain(_cl);
69 }
70
71 virtual void do_oop(narrowOop* p) {
72 ShouldNotReachHere();
73 }
74 };
75
76 class ZHeapIteratorPushOopClosure : public ExtendedOopClosure {
77 private:
78 ZHeapIterator* const _iter;
79 const oop _base;
80
81 public:
82 ZHeapIteratorPushOopClosure(ZHeapIterator* iter, oop base) :
83 _iter(iter),
84 _base(base) {}
85
86 void do_oop_nv(oop* p) {
|