26 #include "classfile/javaClasses.hpp" |
26 #include "classfile/javaClasses.hpp" |
27 #include "gc_implementation/shared/markSweep.inline.hpp" |
27 #include "gc_implementation/shared/markSweep.inline.hpp" |
28 #include "oops/arrayKlassKlass.hpp" |
28 #include "oops/arrayKlassKlass.hpp" |
29 #include "oops/oop.inline.hpp" |
29 #include "oops/oop.inline.hpp" |
30 #include "runtime/handles.inline.hpp" |
30 #include "runtime/handles.inline.hpp" |
|
31 #ifndef SERIALGC |
|
32 #include "gc_implementation/parNew/parOopClosures.inline.hpp" |
|
33 #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" |
|
34 #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" |
|
35 #include "memory/cardTableRS.hpp" |
|
36 #include "oops/oop.pcgc.inline.hpp" |
|
37 #endif |
31 |
38 |
32 |
39 |
33 klassOop arrayKlassKlass::create_klass(TRAPS) { |
40 klassOop arrayKlassKlass::create_klass(TRAPS) { |
34 arrayKlassKlass o; |
41 arrayKlassKlass o; |
35 KlassHandle h_this_klass(THREAD, Universe::klassKlassObj()); |
42 KlassHandle h_this_klass(THREAD, Universe::klassKlassObj()); |
102 |
109 |
103 |
110 |
104 int arrayKlassKlass::oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr) { |
111 int arrayKlassKlass::oop_oop_iterate_m(oop obj, OopClosure* blk, MemRegion mr) { |
105 assert(obj->is_klass(), "must be klass"); |
112 assert(obj->is_klass(), "must be klass"); |
106 arrayKlass* ak = arrayKlass::cast(klassOop(obj)); |
113 arrayKlass* ak = arrayKlass::cast(klassOop(obj)); |
107 blk->do_oop(ak->adr_component_mirror()); |
114 oop* addr = ak->adr_component_mirror(); |
108 blk->do_oop(ak->adr_lower_dimension()); |
115 if (mr.contains(addr)) blk->do_oop(addr); |
109 blk->do_oop(ak->adr_higher_dimension()); |
116 addr = ak->adr_lower_dimension(); |
|
117 if (mr.contains(addr)) blk->do_oop(addr); |
|
118 addr = ak->adr_higher_dimension(); |
|
119 if (mr.contains(addr)) blk->do_oop(addr); |
110 ak->vtable()->oop_oop_iterate_m(blk, mr); |
120 ak->vtable()->oop_oop_iterate_m(blk, mr); |
111 return klassKlass::oop_oop_iterate_m(obj, blk, mr); |
121 return klassKlass::oop_oop_iterate_m(obj, blk, mr); |
112 } |
122 } |
113 |
123 |
114 #ifndef SERIALGC |
124 #ifndef SERIALGC |
115 void arrayKlassKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { |
125 void arrayKlassKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { |
116 assert(obj->blueprint()->oop_is_arrayKlass(),"must be an array klass"); |
126 assert(obj->blueprint()->oop_is_arrayKlass(),"must be an array klass"); |
|
127 arrayKlass* ak = arrayKlass::cast(klassOop(obj)); |
|
128 oop* p = ak->adr_component_mirror(); |
|
129 if (PSScavenge::should_scavenge(p)) { |
|
130 pm->claim_or_forward_depth(p); |
|
131 } |
|
132 klassKlass::oop_push_contents(pm, obj); |
117 } |
133 } |
118 |
134 |
119 int arrayKlassKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { |
135 int arrayKlassKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { |
120 assert(obj->is_klass(), "must be klass"); |
136 assert(obj->is_klass(), "must be klass"); |
121 arrayKlass* ak = arrayKlass::cast(klassOop(obj)); |
137 arrayKlass* ak = arrayKlass::cast(klassOop(obj)); |