< prev index next >

src/hotspot/share/gc/parallel/psCompactionManager.cpp

Print this page
*** 34,10 ***
--- 34,11 ---
  #include "gc/shared/taskqueue.inline.hpp"
  #include "logging/log.hpp"
  #include "memory/iterator.inline.hpp"
  #include "oops/access.inline.hpp"
  #include "oops/compressedOops.inline.hpp"
+ #include "oops/flatArrayKlass.inline.hpp"
  #include "oops/instanceKlass.inline.hpp"
  #include "oops/instanceMirrorKlass.inline.hpp"
  #include "oops/objArrayKlass.inline.hpp"
  #include "oops/oop.inline.hpp"
  

*** 117,19 ***
    assert(index < ParallelGCThreads, "index out of range");
    assert(_manager_array != nullptr, "Sanity");
    return _manager_array[index];
  }
  
! void ParCompactionManager::push_objArray(oop obj) {
!   assert(obj->is_objArray(), "precondition");
    _mark_and_push_closure.do_klass(obj->klass());
  
!   objArrayOop obj_array = objArrayOop(obj);
!   size_t array_length = obj_array->length();
    size_t initial_chunk_size =
!     _partial_array_splitter.start(&_marking_stack, obj_array, nullptr, array_length);
!   follow_array(obj_array, 0, initial_chunk_size);
  }
  
  void ParCompactionManager::process_array_chunk(PartialArrayState* state, bool stolen) {
    // Access before release by claim().
    oop obj = state->source();
--- 118,23 ---
    assert(index < ParallelGCThreads, "index out of range");
    assert(_manager_array != nullptr, "Sanity");
    return _manager_array[index];
  }
  
! void ParCompactionManager::push_objArray(objArrayOop obj) {
!   assert(obj->is_array_with_oops(), "precondition");
    _mark_and_push_closure.do_klass(obj->klass());
  
!   if (obj->is_flatArray()) {
!     FlatArrayKlass* faklass = FlatArrayKlass::cast(obj->klass());
+     _mark_and_push_closure.do_klass(faklass->element_klass());
+   }
+ 
+   size_t array_length = obj->length();
    size_t initial_chunk_size =
!     _partial_array_splitter.start(&_marking_stack, obj, nullptr, array_length);
!   follow_array(obj, 0, initial_chunk_size);
  }
  
  void ParCompactionManager::process_array_chunk(PartialArrayState* state, bool stolen) {
    // Access before release by claim().
    oop obj = state->source();
< prev index next >