< prev index next >

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

Print this page
@@ -97,40 +97,25 @@
    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);
-   }
+   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_objArray()) {
-       push_objArray(obj);
+     if (obj->is_array_with_oops()) {
+       push_objArray((objArrayOop)obj);
      } else {
        obj->oop_iterate(&_mark_and_push_closure);
      }
    }
  }
< prev index next >