20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_MEMORY_ITERATOR_HPP
26 #define SHARE_MEMORY_ITERATOR_HPP
27
28 #include "memory/allocation.hpp"
29 #include "memory/memRegion.hpp"
30 #include "oops/oopsHierarchy.hpp"
31
32 class CodeBlob;
33 class nmethod;
34 class ReferenceDiscoverer;
35 class DataLayout;
36 class KlassClosure;
37 class ClassLoaderData;
38 class Symbol;
39 class Metadata;
40
41 // The following classes are C++ `closures` for iterating over objects, roots and spaces
42
43 class Closure : public StackObj { };
44
45 // OopClosure is used for iterating through references to Java objects.
46 class OopClosure : public Closure {
47 public:
48 virtual void do_oop(oop* o) = 0;
49 virtual void do_oop(narrowOop* o) = 0;
50 };
51
52 class DoNothingClosure : public OopClosure {
53 public:
54 virtual void do_oop(oop* p) {}
55 virtual void do_oop(narrowOop* p) {}
56 };
57 extern DoNothingClosure do_nothing_cl;
58
59 // OopIterateClosure adds extra code to be run during oop iterations.
60 // This is needed by the GC and is extracted to a separate type to not
61 // pollute the OopClosure interface.
62 class OopIterateClosure : public OopClosure {
63 private:
|
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_MEMORY_ITERATOR_HPP
26 #define SHARE_MEMORY_ITERATOR_HPP
27
28 #include "memory/allocation.hpp"
29 #include "memory/memRegion.hpp"
30 #include "oops/oopsHierarchy.hpp"
31
32 class CodeBlob;
33 class nmethod;
34 class ReferenceDiscoverer;
35 class DataLayout;
36 class KlassClosure;
37 class ClassLoaderData;
38 class Symbol;
39 class Metadata;
40 class Thread;
41
42 // The following classes are C++ `closures` for iterating over objects, roots and spaces
43
44 class Closure : public StackObj { };
45
46 // Thread iterator
47 class ThreadClosure: public Closure {
48 public:
49 virtual void do_thread(Thread* thread) = 0;
50 };
51
52 // OopClosure is used for iterating through references to Java objects.
53 class OopClosure : public Closure {
54 public:
55 virtual void do_oop(oop* o) = 0;
56 virtual void do_oop(narrowOop* o) = 0;
57 };
58
59 class DoNothingClosure : public OopClosure {
60 public:
61 virtual void do_oop(oop* p) {}
62 virtual void do_oop(narrowOop* p) {}
63 };
64 extern DoNothingClosure do_nothing_cl;
65
66 // OopIterateClosure adds extra code to be run during oop iterations.
67 // This is needed by the GC and is extracted to a separate type to not
68 // pollute the OopClosure interface.
69 class OopIterateClosure : public OopClosure {
70 private:
|