23 */ |
23 */ |
24 |
24 |
25 #ifndef SHARE_VM_OOPS_INSTANCECLASSLOADERKLASS_HPP |
25 #ifndef SHARE_VM_OOPS_INSTANCECLASSLOADERKLASS_HPP |
26 #define SHARE_VM_OOPS_INSTANCECLASSLOADERKLASS_HPP |
26 #define SHARE_VM_OOPS_INSTANCECLASSLOADERKLASS_HPP |
27 |
27 |
28 #include "gc/shared/specialized_oop_closures.hpp" |
|
29 #include "oops/instanceKlass.hpp" |
28 #include "oops/instanceKlass.hpp" |
30 #include "utilities/macros.hpp" |
29 #include "utilities/macros.hpp" |
31 |
30 |
32 class ClassFileParser; |
31 class ClassFileParser; |
33 |
32 |
38 // the list later? |
37 // the list later? |
39 |
38 |
40 class InstanceClassLoaderKlass: public InstanceKlass { |
39 class InstanceClassLoaderKlass: public InstanceKlass { |
41 friend class VMStructs; |
40 friend class VMStructs; |
42 friend class InstanceKlass; |
41 friend class InstanceKlass; |
43 private: |
42 public: |
44 InstanceClassLoaderKlass(const ClassFileParser& parser) : InstanceKlass(parser, InstanceKlass::_misc_kind_class_loader) {} |
43 static const KlassID ID = InstanceClassLoaderKlassID; |
|
44 |
|
45 private: |
|
46 InstanceClassLoaderKlass(const ClassFileParser& parser) : InstanceKlass(parser, InstanceKlass::_misc_kind_class_loader, ID) {} |
45 |
47 |
46 public: |
48 public: |
47 InstanceClassLoaderKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for CDS"); } |
49 InstanceClassLoaderKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for CDS"); } |
48 |
50 |
49 // GC specific object visitors |
51 // GC specific object visitors |
55 void oop_pc_follow_contents(oop obj, ParCompactionManager* cm); |
57 void oop_pc_follow_contents(oop obj, ParCompactionManager* cm); |
56 void oop_pc_update_pointers(oop obj, ParCompactionManager* cm); |
58 void oop_pc_update_pointers(oop obj, ParCompactionManager* cm); |
57 #endif |
59 #endif |
58 |
60 |
59 // Oop fields (and metadata) iterators |
61 // Oop fields (and metadata) iterators |
60 // [nv = true] Use non-virtual calls to do_oop_nv. |
|
61 // [nv = false] Use virtual calls to do_oop. |
|
62 // |
62 // |
63 // The InstanceClassLoaderKlass iterators also visit the CLD pointer (or mirror of anonymous klasses.) |
63 // The InstanceClassLoaderKlass iterators also visit the CLD pointer (or mirror of anonymous klasses.) |
64 |
64 |
65 private: |
65 public: |
66 // Forward iteration |
66 // Forward iteration |
67 // Iterate over the oop fields and metadata. |
67 // Iterate over the oop fields and metadata. |
68 template <bool nv, class OopClosureType> |
68 template <typename T, class OopClosureType> |
69 inline void oop_oop_iterate(oop obj, OopClosureType* closure); |
69 inline void oop_oop_iterate(oop obj, OopClosureType* closure); |
70 |
70 |
71 #if INCLUDE_OOP_OOP_ITERATE_BACKWARDS |
|
72 // Reverse iteration |
71 // Reverse iteration |
73 // Iterate over the oop fields and metadata. |
72 // Iterate over the oop fields and metadata. |
74 template <bool nv, class OopClosureType> |
73 template <typename T, class OopClosureType> |
75 inline void oop_oop_iterate_reverse(oop obj, OopClosureType* closure); |
74 inline void oop_oop_iterate_reverse(oop obj, OopClosureType* closure); |
76 #endif |
|
77 |
75 |
78 // Bounded range iteration |
76 // Bounded range iteration |
79 // Iterate over the oop fields and metadata. |
77 // Iterate over the oop fields and metadata. |
80 template <bool nv, class OopClosureType> |
78 template <typename T, class OopClosureType> |
81 inline void oop_oop_iterate_bounded(oop obj, OopClosureType* closure, MemRegion mr); |
79 inline void oop_oop_iterate_bounded(oop obj, OopClosureType* closure, MemRegion mr); |
82 |
|
83 public: |
|
84 |
|
85 ALL_OOP_OOP_ITERATE_CLOSURES_1(OOP_OOP_ITERATE_DECL) |
|
86 ALL_OOP_OOP_ITERATE_CLOSURES_2(OOP_OOP_ITERATE_DECL) |
|
87 |
|
88 #if INCLUDE_OOP_OOP_ITERATE_BACKWARDS |
|
89 ALL_OOP_OOP_ITERATE_CLOSURES_1(OOP_OOP_ITERATE_DECL_BACKWARDS) |
|
90 ALL_OOP_OOP_ITERATE_CLOSURES_2(OOP_OOP_ITERATE_DECL_BACKWARDS) |
|
91 #endif |
|
92 |
|
93 }; |
80 }; |
94 |
81 |
95 #endif // SHARE_VM_OOPS_INSTANCECLASSLOADERKLASS_HPP |
82 #endif // SHARE_VM_OOPS_INSTANCECLASSLOADERKLASS_HPP |