< prev index next >

src/hotspot/share/gc/parallel/psCompactionManager.inline.hpp

Print this page
*** 97,40 ***
    if (_terminator != nullptr) {
      steal_marking_work(*_terminator, _worker_id);
    }
  }
  
- template <typename T>
- inline void follow_array_specialized(objArrayOop obj, size_t start, size_t end, ParCompactionManager* cm) {
-   assert(start <= end, "invariant");
-   T* const base = (T*)obj->base();
-   T* const beg = base + start;
-   T* const chunk_end = base + end;
- 
-   // Push the non-null elements of the next stride on the marking stack.
-   for (T* e = beg; e < chunk_end; e++) {
-     cm->mark_and_push<T>(e);
-   }
- }
- 
  inline void ParCompactionManager::follow_array(objArrayOop obj, size_t start, size_t end) {
!   if (UseCompressedOops) {
!     follow_array_specialized<narrowOop>(obj, start, end, this);
!   } else {
-     follow_array_specialized<oop>(obj, start, end, this);
-   }
  }
  
  inline void ParCompactionManager::follow_contents(const ScannerTask& task, bool stolen) {
    if (task.is_partial_array_state()) {
      assert(PSParallelCompact::mark_bitmap()->is_marked(task.to_partial_array_state()->source()), "should be marked");
      process_array_chunk(task.to_partial_array_state(), stolen);
    } else {
      oop obj = task.to_oop();
      assert(PSParallelCompact::mark_bitmap()->is_marked(obj), "should be marked");
!     if (obj->is_objArray()) {
!       push_objArray(obj);
      } else {
        obj->oop_iterate(&_mark_and_push_closure);
      }
    }
  }
--- 97,25 ---
    if (_terminator != nullptr) {
      steal_marking_work(*_terminator, _worker_id);
    }
  }
  
  inline void ParCompactionManager::follow_array(objArrayOop obj, size_t start, size_t end) {
!   obj->oop_iterate_elements_range(&_mark_and_push_closure,
!                                   checked_cast<int>(start),
!                                   checked_cast<int>(end));
  }
  
  inline void ParCompactionManager::follow_contents(const ScannerTask& task, bool stolen) {
    if (task.is_partial_array_state()) {
      assert(PSParallelCompact::mark_bitmap()->is_marked(task.to_partial_array_state()->source()), "should be marked");
      process_array_chunk(task.to_partial_array_state(), stolen);
    } else {
      oop obj = task.to_oop();
      assert(PSParallelCompact::mark_bitmap()->is_marked(obj), "should be marked");
!     if (obj->is_array_with_oops()) {
!       push_objArray((objArrayOop)obj);
      } else {
        obj->oop_iterate(&_mark_and_push_closure);
      }
    }
  }
< prev index next >