< prev index next >

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

Print this page
*** 230,11 ***
    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,
                                checked_cast<int>(claim._start),
                                checked_cast<int>(claim._end));
  }
  
  MAYBE_INLINE_EVACUATION
--- 230,12 ---
    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.
!   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

*** 252,11 ***
  
    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));
  }
  
  MAYBE_INLINE_EVACUATION
  void G1ParScanThreadState::dispatch_task(ScannerTask task, bool stolen) {
    verify_task(task);
--- 253,12 ---
  
    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.
!   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);

*** 423,20 ***
                                               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()) {
        assert(!klass->is_stack_chunk_instance_klass(), "must be");
  
!       if (klass->is_objArray_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");
        }
        return;
      }
  
      ContinuationGCSupport::transform_stack_chunk(obj);
--- 425,20 ---
                                               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() && !klass->is_flatArray_klass()) {
        assert(!klass->is_stack_chunk_instance_klass(), "must be");
  
!       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() || klass->is_objArray_klass(), "invariant");
        }
        return;
      }
  
      ContinuationGCSupport::transform_stack_chunk(obj);
< prev index next >