105 assert(beg_index < len || len == 0, "index too large"); |
105 assert(beg_index < len || len == 0, "index too large"); |
106 |
106 |
107 const int stride = MIN2(len - beg_index, (int) ObjArrayMarkingStride); |
107 const int stride = MIN2(len - beg_index, (int) ObjArrayMarkingStride); |
108 const int end_index = beg_index + stride; |
108 const int end_index = beg_index + stride; |
109 |
109 |
|
110 // Push the continuation first to allow more efficient work stealing. |
|
111 if (end_index < len) { |
|
112 push_objarray(array, end_index); |
|
113 } |
|
114 |
110 array->oop_iterate_range(mark_closure(), beg_index, end_index); |
115 array->oop_iterate_range(mark_closure(), beg_index, end_index); |
111 |
116 |
112 if (VerifyDuringGC) { |
117 if (VerifyDuringGC) { |
113 _verify_closure.set_containing_obj(array); |
118 _verify_closure.set_containing_obj(array); |
114 NoHeaderExtendedOopClosure no(&_verify_closure); |
119 NoHeaderExtendedOopClosure no(&_verify_closure); |
115 array->oop_iterate_range(&no, beg_index, end_index); |
120 array->oop_iterate_range(&no, beg_index, end_index); |
116 if (_verify_closure.failures()) { |
121 if (_verify_closure.failures()) { |
117 assert(false, "Failed"); |
122 assert(false, "Failed"); |
118 } |
123 } |
119 } |
|
120 |
|
121 if (end_index < len) { |
|
122 push_objarray(array, end_index); // Push the continuation. |
|
123 } |
124 } |
124 } |
125 } |
125 |
126 |
126 inline void G1FullGCMarker::follow_object(oop obj) { |
127 inline void G1FullGCMarker::follow_object(oop obj) { |
127 assert(_bitmap->is_marked(obj), "should be marked"); |
128 assert(_bitmap->is_marked(obj), "should be marked"); |