30 |
30 |
31 class ObjectClosure; |
31 class ObjectClosure; |
32 class ZHeapIteratorBitMap; |
32 class ZHeapIteratorBitMap; |
33 |
33 |
34 class ZHeapIterator : public StackObj { |
34 class ZHeapIterator : public StackObj { |
35 friend class ZHeapIteratorRootOopClosure; |
35 template<bool Concurrent, bool Weak> friend class ZHeapIteratorRootOopClosure; |
36 friend class ZHeapIteratorOopClosure; |
36 template<bool VisitReferents> friend class ZHeapIteratorOopClosure; |
37 |
37 |
38 private: |
38 private: |
39 typedef ZGranuleMap<ZHeapIteratorBitMap*> ZVisitMap; |
39 typedef ZGranuleMap<ZHeapIteratorBitMap*> ZVisitMap; |
40 typedef ZGranuleMapIterator<ZHeapIteratorBitMap*> ZVisitMapIterator; |
40 typedef ZGranuleMapIterator<ZHeapIteratorBitMap*> ZVisitMapIterator; |
41 typedef Stack<oop, mtGC> ZVisitStack; |
41 typedef Stack<oop, mtGC> ZVisitStack; |
42 |
42 |
43 ZVisitStack _visit_stack; |
43 ZVisitStack _visit_stack; |
44 ZVisitMap _visit_map; |
44 ZVisitMap _visit_map; |
45 const bool _visit_referents; |
|
46 |
45 |
47 ZHeapIteratorBitMap* object_map(oop obj); |
46 ZHeapIteratorBitMap* object_map(oop obj); |
48 void push(oop obj); |
47 void push(oop obj); |
49 |
48 |
|
49 template <typename RootsIterator, bool Concurrent, bool Weak> void push_roots(); |
|
50 template <bool VisitReferents> void push_fields(oop obj); |
|
51 template <bool VisitReferents> void objects_do(ObjectClosure* cl); |
|
52 |
50 public: |
53 public: |
51 ZHeapIterator(bool visit_referents); |
54 ZHeapIterator(); |
52 ~ZHeapIterator(); |
55 ~ZHeapIterator(); |
53 |
56 |
54 void objects_do(ObjectClosure* cl); |
57 void objects_do(ObjectClosure* cl, bool visit_referents); |
55 }; |
58 }; |
56 |
59 |
57 #endif // SHARE_GC_Z_ZHEAPITERATOR_HPP |
60 #endif // SHARE_GC_Z_ZHEAPITERATOR_HPP |