148 }
149 }
150 }
151
152 void G1FullGCMarker::drain_stack() {
153 do {
154 oop obj;
155 while (pop_object(obj)) {
156 assert(_bitmap->is_marked(obj), "must be marked");
157 follow_object(obj);
158 }
159 // Process ObjArrays one at a time to avoid marking stack bloat.
160 ObjArrayTask task;
161 if (pop_objarray(task)) {
162 follow_array_chunk(objArrayOop(task.obj()), task.index());
163 }
164 } while (!is_empty());
165 }
166
167 inline void G1FullGCMarker::follow_klass(Klass* k) {
168 oop op = k->klass_holder();
169 mark_and_push(&op);
170 }
171
172 inline void G1FullGCMarker::follow_cld(ClassLoaderData* cld) {
173 _cld_closure.do_cld(cld);
174 }
175
176 #endif
|
148 }
149 }
150 }
151
152 void G1FullGCMarker::drain_stack() {
153 do {
154 oop obj;
155 while (pop_object(obj)) {
156 assert(_bitmap->is_marked(obj), "must be marked");
157 follow_object(obj);
158 }
159 // Process ObjArrays one at a time to avoid marking stack bloat.
160 ObjArrayTask task;
161 if (pop_objarray(task)) {
162 follow_array_chunk(objArrayOop(task.obj()), task.index());
163 }
164 } while (!is_empty());
165 }
166
167 inline void G1FullGCMarker::follow_klass(Klass* k) {
168 oop op = k->class_loader_data()->holder_no_keepalive();
169 mark_and_push(&op);
170 }
171
172 inline void G1FullGCMarker::follow_cld(ClassLoaderData* cld) {
173 _cld_closure.do_cld(cld);
174 }
175
176 #endif
|