< prev index next >

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

Print this page




 100   assert(region_ptr->claimed(), "must be claimed");
 101   assert(region_ptr->_pushed++ == 0, "should only be pushed once");
 102 #endif
 103   region_stack()->push(index);
 104 }
 105 
 106 template <typename T>
 107 inline void ParCompactionManager::mark_and_push(T* p) {
 108   T heap_oop = RawAccess<>::oop_load(p);
 109   if (!CompressedOops::is_null(heap_oop)) {
 110     oop obj = CompressedOops::decode_not_null(heap_oop);
 111     assert(ParallelScavengeHeap::heap()->is_in(obj), "should be in heap");
 112 
 113     if (mark_bitmap()->is_unmarked(obj) && PSParallelCompact::mark_obj(obj)) {
 114       push(obj);
 115     }
 116   }
 117 }
 118 
 119 inline void ParCompactionManager::follow_klass(Klass* klass) {
 120   oop holder = klass->klass_holder();
 121   mark_and_push(&holder);
 122 }
 123 
 124 inline void ParCompactionManager::FollowStackClosure::do_void() {
 125   _compaction_manager->follow_marking_stacks();
 126 }
 127 
 128 template <typename T>
 129 inline void follow_array_specialized(objArrayOop obj, int index, ParCompactionManager* cm) {
 130   const size_t len = size_t(obj->length());
 131   const size_t beg_index = size_t(index);
 132   assert(beg_index < len || len == 0, "index too large");
 133 
 134   const size_t stride = MIN2(len - beg_index, (size_t)ObjArrayMarkingStride);
 135   const size_t end_index = beg_index + stride;
 136   T* const base = (T*)obj->base_raw();
 137   T* const beg = base + beg_index;
 138   T* const end = base + end_index;
 139 
 140   if (end_index < len) {




 100   assert(region_ptr->claimed(), "must be claimed");
 101   assert(region_ptr->_pushed++ == 0, "should only be pushed once");
 102 #endif
 103   region_stack()->push(index);
 104 }
 105 
 106 template <typename T>
 107 inline void ParCompactionManager::mark_and_push(T* p) {
 108   T heap_oop = RawAccess<>::oop_load(p);
 109   if (!CompressedOops::is_null(heap_oop)) {
 110     oop obj = CompressedOops::decode_not_null(heap_oop);
 111     assert(ParallelScavengeHeap::heap()->is_in(obj), "should be in heap");
 112 
 113     if (mark_bitmap()->is_unmarked(obj) && PSParallelCompact::mark_obj(obj)) {
 114       push(obj);
 115     }
 116   }
 117 }
 118 
 119 inline void ParCompactionManager::follow_klass(Klass* klass) {
 120   oop holder = klass->class_loader_data()->holder_no_keepalive();
 121   mark_and_push(&holder);
 122 }
 123 
 124 inline void ParCompactionManager::FollowStackClosure::do_void() {
 125   _compaction_manager->follow_marking_stacks();
 126 }
 127 
 128 template <typename T>
 129 inline void follow_array_specialized(objArrayOop obj, int index, ParCompactionManager* cm) {
 130   const size_t len = size_t(obj->length());
 131   const size_t beg_index = size_t(index);
 132   assert(beg_index < len || len == 0, "index too large");
 133 
 134   const size_t stride = MIN2(len - beg_index, (size_t)ObjArrayMarkingStride);
 135   const size_t end_index = beg_index + stride;
 136   T* const base = (T*)obj->base_raw();
 137   T* const beg = base + beg_index;
 138   T* const end = base + end_index;
 139 
 140   if (end_index < len) {


< prev index next >