< prev index next >

src/share/vm/gc/parallel/psCompactionManager.cpp

Print this page




 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   }


< prev index next >