< prev index next > src/hotspot/share/gc/parallel/psCompactionManager.cpp
Print this page
#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"
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();
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 >