3116 if (UseCompressedOops) { 3117 oop_pc_update_pointers_specialized<narrowOop>(obj, cm); 3118 } else { 3119 oop_pc_update_pointers_specialized<oop>(obj, cm); 3120 } 3121 } 3122 3123 void ObjArrayKlass::oop_pc_update_pointers(oop obj, ParCompactionManager* cm) { 3124 assert(obj->is_objArray(), "obj must be obj array"); 3125 PSParallelCompact::AdjustPointerClosure closure(cm); 3126 oop_oop_iterate_elements<true>(objArrayOop(obj), &closure); 3127 } 3128 3129 void TypeArrayKlass::oop_pc_update_pointers(oop obj, ParCompactionManager* cm) { 3130 assert(obj->is_typeArray(),"must be a type array"); 3131 } 3132 3133 void ValueArrayKlass::oop_pc_update_pointers(oop obj, ParCompactionManager* cm) { 3134 assert(obj->is_valueArray(),"must be a value array"); 3135 if (contains_oops()) { 3136 Unimplemented(); 3137 #if 0 3138 PSParallelCompact::AdjustPointerClosure closure(cm); 3139 oop_oop_iterate_elements<true>(valueArrayOop(obj), &closure); 3140 #endif 3141 } 3142 } 3143 3144 ParMarkBitMapClosure::IterationStatus 3145 MoveAndUpdateClosure::do_addr(HeapWord* addr, size_t words) { 3146 assert(destination() != NULL, "sanity"); 3147 assert(bitmap()->obj_size(addr) == words, "bad size"); 3148 3149 _source = addr; 3150 assert(PSParallelCompact::summary_data().calc_new_pointer(source(), compaction_manager()) == 3151 destination(), "wrong destination"); 3152 3153 if (words > words_remaining()) { 3154 return ParMarkBitMap::would_overflow; 3155 } 3156 3157 // The start_array must be updated even if the object is not moving. 3158 if (_start_array != NULL) { 3159 _start_array->allocate_block(destination()); 3160 } | 3116 if (UseCompressedOops) { 3117 oop_pc_update_pointers_specialized<narrowOop>(obj, cm); 3118 } else { 3119 oop_pc_update_pointers_specialized<oop>(obj, cm); 3120 } 3121 } 3122 3123 void ObjArrayKlass::oop_pc_update_pointers(oop obj, ParCompactionManager* cm) { 3124 assert(obj->is_objArray(), "obj must be obj array"); 3125 PSParallelCompact::AdjustPointerClosure closure(cm); 3126 oop_oop_iterate_elements<true>(objArrayOop(obj), &closure); 3127 } 3128 3129 void TypeArrayKlass::oop_pc_update_pointers(oop obj, ParCompactionManager* cm) { 3130 assert(obj->is_typeArray(),"must be a type array"); 3131 } 3132 3133 void ValueArrayKlass::oop_pc_update_pointers(oop obj, ParCompactionManager* cm) { 3134 assert(obj->is_valueArray(),"must be a value array"); 3135 if (contains_oops()) { 3136 PSParallelCompact::AdjustPointerClosure closure(cm); 3137 oop_oop_iterate_elements<true>(valueArrayOop(obj), &closure); 3138 } 3139 } 3140 3141 ParMarkBitMapClosure::IterationStatus 3142 MoveAndUpdateClosure::do_addr(HeapWord* addr, size_t words) { 3143 assert(destination() != NULL, "sanity"); 3144 assert(bitmap()->obj_size(addr) == words, "bad size"); 3145 3146 _source = addr; 3147 assert(PSParallelCompact::summary_data().calc_new_pointer(source(), compaction_manager()) == 3148 destination(), "wrong destination"); 3149 3150 if (words > words_remaining()) { 3151 return ParMarkBitMap::would_overflow; 3152 } 3153 3154 // The start_array must be updated even if the object is not moving. 3155 if (_start_array != NULL) { 3156 _start_array->allocate_block(destination()); 3157 } |