253 gclog_or_tty->print_cr(" Non NULL normal " PTR_FORMAT, p2i(obj)); 254 } 255 ) 256 cm->mark_and_push(referent_addr); 257 } 258 } 259 T* next_addr = (T*)java_lang_ref_Reference::next_addr(obj); 260 // Treat discovered as normal oop, if ref is not "active", 261 // i.e. if next is non-NULL. 262 T next_oop = oopDesc::load_heap_oop(next_addr); 263 if (!oopDesc::is_null(next_oop)) { // i.e. ref is not "active" 264 T* discovered_addr = (T*)java_lang_ref_Reference::discovered_addr(obj); 265 debug_only( 266 if(TraceReferenceGC && PrintGCDetails) { 267 gclog_or_tty->print_cr(" Process discovered as normal " 268 PTR_FORMAT, p2i(discovered_addr)); 269 } 270 ) 271 cm->mark_and_push(discovered_addr); 272 } 273 cm->mark_and_push(next_addr); 274 klass->InstanceKlass::oop_pc_follow_contents(obj, cm); 275 } 276 277 278 void InstanceRefKlass::oop_pc_follow_contents(oop obj, ParCompactionManager* cm) { 279 if (UseCompressedOops) { 280 oop_pc_follow_contents_specialized<narrowOop>(this, obj, cm); 281 } else { 282 oop_pc_follow_contents_specialized<oop>(this, obj, cm); 283 } 284 } 285 286 void ObjArrayKlass::oop_pc_follow_contents(oop obj, ParCompactionManager* cm) { 287 cm->follow_klass(this); 288 289 if (UseCompressedOops) { 290 oop_pc_follow_contents_specialized<narrowOop>(objArrayOop(obj), 0, cm); 291 } else { 292 oop_pc_follow_contents_specialized<oop>(objArrayOop(obj), 0, cm); 293 } | 253 gclog_or_tty->print_cr(" Non NULL normal " PTR_FORMAT, p2i(obj)); 254 } 255 ) 256 cm->mark_and_push(referent_addr); 257 } 258 } 259 T* next_addr = (T*)java_lang_ref_Reference::next_addr(obj); 260 // Treat discovered as normal oop, if ref is not "active", 261 // i.e. if next is non-NULL. 262 T next_oop = oopDesc::load_heap_oop(next_addr); 263 if (!oopDesc::is_null(next_oop)) { // i.e. ref is not "active" 264 T* discovered_addr = (T*)java_lang_ref_Reference::discovered_addr(obj); 265 debug_only( 266 if(TraceReferenceGC && PrintGCDetails) { 267 gclog_or_tty->print_cr(" Process discovered as normal " 268 PTR_FORMAT, p2i(discovered_addr)); 269 } 270 ) 271 cm->mark_and_push(discovered_addr); 272 } 273 // Treat next as normal oop 274 cm->mark_and_push(next_addr); 275 // Treat value as normal oop if Epehemeron 276 if (klass->reference_type() == REF_EPHEMERON) { 277 T* value_addr = (T*)java_lang_ref_Ephemeron::value_addr(obj); 278 cm->mark_and_push(value_addr); 279 } 280 klass->InstanceKlass::oop_pc_follow_contents(obj, cm); 281 } 282 283 284 void InstanceRefKlass::oop_pc_follow_contents(oop obj, ParCompactionManager* cm) { 285 if (UseCompressedOops) { 286 oop_pc_follow_contents_specialized<narrowOop>(this, obj, cm); 287 } else { 288 oop_pc_follow_contents_specialized<oop>(this, obj, cm); 289 } 290 } 291 292 void ObjArrayKlass::oop_pc_follow_contents(oop obj, ParCompactionManager* cm) { 293 cm->follow_klass(this); 294 295 if (UseCompressedOops) { 296 oop_pc_follow_contents_specialized<narrowOop>(objArrayOop(obj), 0, cm); 297 } else { 298 oop_pc_follow_contents_specialized<oop>(objArrayOop(obj), 0, cm); 299 } |