< prev index next > src/hotspot/share/gc/g1/g1ParScanThreadState.cpp
Print this page
PartialArraySplitter::Claim claim =
_partial_array_splitter.claim(state, _task_queue, stolen);
G1HeapRegionAttr dest_attr = _g1h->region_attr(to_array);
G1SkipCardEnqueueSetter x(&_scanner, dest_attr.is_new_survivor());
// Process claimed task.
- to_array->oop_iterate_range(&_scanner,
+ assert(to_array->is_refArray(), "Must be");
+ refArrayOop(to_array)->oop_iterate_range(&_scanner,
checked_cast<int>(claim._start),
checked_cast<int>(claim._end));
}
MAYBE_INLINE_EVACUATION
assert(_scanner.skip_card_enqueue_set(), "must be");
// Process the initial chunk. No need to process the type in the
// klass, as it will already be handled by processing the built-in
// module.
- to_array->oop_iterate_range(&_scanner, 0, checked_cast<int>(initial_chunk_size));
+ assert(to_array->is_refArray(), "Must be");
+ refArrayOop(to_array)->oop_iterate_range(&_scanner, 0, checked_cast<int>(initial_chunk_size));
}
MAYBE_INLINE_EVACUATION
void G1ParScanThreadState::dispatch_task(ScannerTask task, bool stolen) {
verify_task(task);
G1HeapRegionAttr const region_attr,
G1HeapRegionAttr const dest_attr,
uint age) {
// Most objects are not arrays, so do one array check rather than
// checking for each array category for each object.
- if (klass->is_array_klass()) {
+ if (klass->is_array_klass() && !klass->is_flatArray_klass()) {
assert(!klass->is_stack_chunk_instance_klass(), "must be");
- if (klass->is_objArray_klass()) {
+ if (klass->is_refArray_klass()) {
start_partial_objarray(old, obj);
} else {
// Nothing needs to be done for typeArrays. Body doesn't contain
// any oops to scan, and the type in the klass will already be handled
// by processing the built-in module.
- assert(klass->is_typeArray_klass(), "invariant");
+ assert(klass->is_typeArray_klass() || klass->is_objArray_klass(), "invariant");
}
return;
}
ContinuationGCSupport::transform_stack_chunk(obj);
< prev index next >