< prev index next >

src/hotspot/share/gc/g1/g1ConcurrentMark.cpp

Print this page

2278     }
2279   }
2280 }
2281 
2282 size_t G1CMTask::start_partial_array_processing(oop obj) {
2283   assert(should_be_sliced(obj), "Must be an array object %d and large %zu", obj->is_objArray(), obj->size());
2284 
2285   objArrayOop obj_array = objArrayOop(obj);
2286   size_t array_length = obj_array->length();
2287 
2288   size_t initial_chunk_size = _partial_array_splitter.start(_task_queue, obj_array, nullptr, array_length);
2289 
2290   // Mark objArray klass metadata
2291   if (_cm_oop_closure->do_metadata()) {
2292     _cm_oop_closure->do_klass(obj_array->klass());
2293   }
2294 
2295   process_array_chunk(obj_array, 0, initial_chunk_size);
2296 
2297   // Include object header size
2298   return objArrayOopDesc::object_size(checked_cast<int>(initial_chunk_size));
2299 }
2300 
2301 size_t G1CMTask::process_partial_array(const G1TaskQueueEntry& task, bool stolen) {
2302   PartialArrayState* state = task.to_partial_array_state();
2303   // Access state before release by claim().
2304   objArrayOop obj = objArrayOop(state->source());
2305 
2306   PartialArraySplitter::Claim claim =
2307     _partial_array_splitter.claim(state, _task_queue, stolen);
2308 
2309   process_array_chunk(obj, claim._start, claim._end);
2310   return heap_word_size((claim._end - claim._start) * heapOopSize);
2311 }
2312 
2313 void G1CMTask::drain_global_stack(bool partially) {
2314   if (has_aborted()) {
2315     return;
2316   }
2317 
2318   // We have a policy to drain the local queue before we attempt to

2278     }
2279   }
2280 }
2281 
2282 size_t G1CMTask::start_partial_array_processing(oop obj) {
2283   assert(should_be_sliced(obj), "Must be an array object %d and large %zu", obj->is_objArray(), obj->size());
2284 
2285   objArrayOop obj_array = objArrayOop(obj);
2286   size_t array_length = obj_array->length();
2287 
2288   size_t initial_chunk_size = _partial_array_splitter.start(_task_queue, obj_array, nullptr, array_length);
2289 
2290   // Mark objArray klass metadata
2291   if (_cm_oop_closure->do_metadata()) {
2292     _cm_oop_closure->do_klass(obj_array->klass());
2293   }
2294 
2295   process_array_chunk(obj_array, 0, initial_chunk_size);
2296 
2297   // Include object header size
2298   return refArrayOopDesc::object_size(checked_cast<int>(initial_chunk_size));
2299 }
2300 
2301 size_t G1CMTask::process_partial_array(const G1TaskQueueEntry& task, bool stolen) {
2302   PartialArrayState* state = task.to_partial_array_state();
2303   // Access state before release by claim().
2304   objArrayOop obj = objArrayOop(state->source());
2305 
2306   PartialArraySplitter::Claim claim =
2307     _partial_array_splitter.claim(state, _task_queue, stolen);
2308 
2309   process_array_chunk(obj, claim._start, claim._end);
2310   return heap_word_size((claim._end - claim._start) * heapOopSize);
2311 }
2312 
2313 void G1CMTask::drain_global_stack(bool partially) {
2314   if (has_aborted()) {
2315     return;
2316   }
2317 
2318   // We have a policy to drain the local queue before we attempt to
< prev index next >