3064
3065 void InstanceKlass::oop_pc_update_pointers(oop obj, ParCompactionManager* cm) {
3066 PSParallelCompact::AdjustPointerClosure closure(cm);
3067 oop_oop_iterate_oop_maps<true>(obj, &closure);
3068 }
3069
3070 void InstanceMirrorKlass::oop_pc_update_pointers(oop obj, ParCompactionManager* cm) {
3071 InstanceKlass::oop_pc_update_pointers(obj, cm);
3072
3073 PSParallelCompact::AdjustPointerClosure closure(cm);
3074 oop_oop_iterate_statics<true>(obj, &closure);
3075 }
3076
3077 void InstanceClassLoaderKlass::oop_pc_update_pointers(oop obj, ParCompactionManager* cm) {
3078 InstanceKlass::oop_pc_update_pointers(obj, cm);
3079 }
3080
3081 #ifdef ASSERT
3082 template <class T> static void trace_reference_gc(const char *s, oop obj,
3083 T* referent_addr,
3084 T* next_addr,
3085 T* discovered_addr) {
3086 log_develop_trace(gc, ref)("%s obj " PTR_FORMAT, s, p2i(obj));
3087 log_develop_trace(gc, ref)(" referent_addr/* " PTR_FORMAT " / " PTR_FORMAT,
3088 p2i(referent_addr), referent_addr ? p2i((oop)RawAccess<>::oop_load(referent_addr)) : NULL);
3089 log_develop_trace(gc, ref)(" next_addr/* " PTR_FORMAT " / " PTR_FORMAT,
3090 p2i(next_addr), next_addr ? p2i((oop)RawAccess<>::oop_load(next_addr)) : NULL);
3091 log_develop_trace(gc, ref)(" discovered_addr/* " PTR_FORMAT " / " PTR_FORMAT,
3092 p2i(discovered_addr), discovered_addr ? p2i((oop)RawAccess<>::oop_load(discovered_addr)) : NULL);
3093 }
3094 #endif
3095
3096 template <class T>
3097 static void oop_pc_update_pointers_specialized(oop obj, ParCompactionManager* cm) {
3098 T* referent_addr = (T*)java_lang_ref_Reference::referent_addr_raw(obj);
3099 PSParallelCompact::adjust_pointer(referent_addr, cm);
3100 T* next_addr = (T*)java_lang_ref_Reference::next_addr_raw(obj);
3101 PSParallelCompact::adjust_pointer(next_addr, cm);
3102 T* discovered_addr = (T*)java_lang_ref_Reference::discovered_addr_raw(obj);
3103 PSParallelCompact::adjust_pointer(discovered_addr, cm);
3104 debug_only(trace_reference_gc("InstanceRefKlass::oop_update_ptrs", obj,
3105 referent_addr, next_addr, discovered_addr);)
3106 }
3107
3108 void InstanceRefKlass::oop_pc_update_pointers(oop obj, ParCompactionManager* cm) {
3109 InstanceKlass::oop_pc_update_pointers(obj, cm);
3110
3111 if (UseCompressedOops) {
3112 oop_pc_update_pointers_specialized<narrowOop>(obj, cm);
3113 } else {
3114 oop_pc_update_pointers_specialized<oop>(obj, cm);
3115 }
3116 }
3117
3118 void ObjArrayKlass::oop_pc_update_pointers(oop obj, ParCompactionManager* cm) {
3119 assert(obj->is_objArray(), "obj must be obj array");
3120 PSParallelCompact::AdjustPointerClosure closure(cm);
3121 oop_oop_iterate_elements<true>(objArrayOop(obj), &closure);
3122 }
3123
3124 void TypeArrayKlass::oop_pc_update_pointers(oop obj, ParCompactionManager* cm) {
3125 assert(obj->is_typeArray(),"must be a type array");
|
3064
3065 void InstanceKlass::oop_pc_update_pointers(oop obj, ParCompactionManager* cm) {
3066 PSParallelCompact::AdjustPointerClosure closure(cm);
3067 oop_oop_iterate_oop_maps<true>(obj, &closure);
3068 }
3069
3070 void InstanceMirrorKlass::oop_pc_update_pointers(oop obj, ParCompactionManager* cm) {
3071 InstanceKlass::oop_pc_update_pointers(obj, cm);
3072
3073 PSParallelCompact::AdjustPointerClosure closure(cm);
3074 oop_oop_iterate_statics<true>(obj, &closure);
3075 }
3076
3077 void InstanceClassLoaderKlass::oop_pc_update_pointers(oop obj, ParCompactionManager* cm) {
3078 InstanceKlass::oop_pc_update_pointers(obj, cm);
3079 }
3080
3081 #ifdef ASSERT
3082 template <class T> static void trace_reference_gc(const char *s, oop obj,
3083 T* referent_addr,
3084 T* discovered_addr) {
3085 log_develop_trace(gc, ref)("%s obj " PTR_FORMAT, s, p2i(obj));
3086 log_develop_trace(gc, ref)(" referent_addr/* " PTR_FORMAT " / " PTR_FORMAT,
3087 p2i(referent_addr), referent_addr ? p2i((oop)RawAccess<>::oop_load(referent_addr)) : NULL);
3088 log_develop_trace(gc, ref)(" discovered_addr/* " PTR_FORMAT " / " PTR_FORMAT,
3089 p2i(discovered_addr), discovered_addr ? p2i((oop)RawAccess<>::oop_load(discovered_addr)) : NULL);
3090 }
3091 #endif
3092
3093 template <class T>
3094 static void oop_pc_update_pointers_specialized(oop obj, ParCompactionManager* cm) {
3095 T* referent_addr = (T*)java_lang_ref_Reference::referent_addr_raw(obj);
3096 PSParallelCompact::adjust_pointer(referent_addr, cm);
3097 T* discovered_addr = (T*)java_lang_ref_Reference::discovered_addr_raw(obj);
3098 PSParallelCompact::adjust_pointer(discovered_addr, cm);
3099 debug_only(trace_reference_gc("InstanceRefKlass::oop_update_ptrs", obj,
3100 referent_addr, discovered_addr);)
3101 }
3102
3103 void InstanceRefKlass::oop_pc_update_pointers(oop obj, ParCompactionManager* cm) {
3104 InstanceKlass::oop_pc_update_pointers(obj, cm);
3105
3106 if (UseCompressedOops) {
3107 oop_pc_update_pointers_specialized<narrowOop>(obj, cm);
3108 } else {
3109 oop_pc_update_pointers_specialized<oop>(obj, cm);
3110 }
3111 }
3112
3113 void ObjArrayKlass::oop_pc_update_pointers(oop obj, ParCompactionManager* cm) {
3114 assert(obj->is_objArray(), "obj must be obj array");
3115 PSParallelCompact::AdjustPointerClosure closure(cm);
3116 oop_oop_iterate_elements<true>(objArrayOop(obj), &closure);
3117 }
3118
3119 void TypeArrayKlass::oop_pc_update_pointers(oop obj, ParCompactionManager* cm) {
3120 assert(obj->is_typeArray(),"must be a type array");
|