55
56 if (mark->must_be_preserved(obj)) {
57 preserve_mark(obj, mark);
58 }
59 }
60
61 inline bool MarkSweep::is_archive_object(oop object) {
62 #if INCLUDE_ALL_GCS
63 return (G1MarkSweep::archive_check_enabled() &&
64 G1MarkSweep::in_archive_range(object));
65 #else
66 return false;
67 #endif
68 }
69
70 inline void MarkSweep::follow_klass(Klass* klass) {
71 oop op = klass->klass_holder();
72 MarkSweep::mark_and_push(&op);
73 }
74
75 inline void MarkSweep::follow_object(oop obj) {
76 assert(obj->is_gc_marked(), "should be marked");
77
78 obj->ms_follow_contents();
79 }
80
81 template <class T> inline void MarkSweep::follow_root(T* p) {
82 assert(!Universe::heap()->is_in_reserved(p),
83 "roots shouldn't be things within the heap");
84 T heap_oop = oopDesc::load_heap_oop(p);
85 if (!oopDesc::is_null(heap_oop)) {
86 oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
87 if (!obj->mark()->is_marked() &&
88 !is_archive_object(obj)) {
89 mark_object(obj);
90 follow_object(obj);
91 }
92 }
93 follow_stack();
94 }
95
96 template <class T> inline void MarkSweep::mark_and_push(T* p) {
97 // assert(Universe::heap()->is_in_reserved(p), "should be in object space");
98 T heap_oop = oopDesc::load_heap_oop(p);
|
55
56 if (mark->must_be_preserved(obj)) {
57 preserve_mark(obj, mark);
58 }
59 }
60
61 inline bool MarkSweep::is_archive_object(oop object) {
62 #if INCLUDE_ALL_GCS
63 return (G1MarkSweep::archive_check_enabled() &&
64 G1MarkSweep::in_archive_range(object));
65 #else
66 return false;
67 #endif
68 }
69
70 inline void MarkSweep::follow_klass(Klass* klass) {
71 oop op = klass->klass_holder();
72 MarkSweep::mark_and_push(&op);
73 }
74
75 inline void MarkSweep::follow_cld(ClassLoaderData* cld) {
76 MarkSweep::follow_cld_closure.do_cld(cld);
77 }
78
79 inline void MarkSweep::follow_object(oop obj) {
80 assert(obj->is_gc_marked(), "should be marked");
81
82 obj->oop_iterate(&mark_and_push_closure);
83 }
84
85 template <class T> inline void MarkSweep::follow_root(T* p) {
86 assert(!Universe::heap()->is_in_reserved(p),
87 "roots shouldn't be things within the heap");
88 T heap_oop = oopDesc::load_heap_oop(p);
89 if (!oopDesc::is_null(heap_oop)) {
90 oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
91 if (!obj->mark()->is_marked() &&
92 !is_archive_object(obj)) {
93 mark_object(obj);
94 follow_object(obj);
95 }
96 }
97 follow_stack();
98 }
99
100 template <class T> inline void MarkSweep::mark_and_push(T* p) {
101 // assert(Universe::heap()->is_in_reserved(p), "should be in object space");
102 T heap_oop = oopDesc::load_heap_oop(p);
|