< prev index next >

src/share/vm/gc/serial/markSweep.cpp

Print this page

        

*** 300,312 **** return InstanceKlass::oop_ms_adjust_pointers(obj); } #ifdef ASSERT template <class T> static void trace_reference_gc(const char *s, oop obj, T* referent_addr, T* next_addr, ! T* discovered_addr) { if(TraceReferenceGC && PrintGCDetails) { gclog_or_tty->print_cr("%s obj " PTR_FORMAT, s, p2i(obj)); gclog_or_tty->print_cr(" referent_addr/* " PTR_FORMAT " / " PTR_FORMAT, p2i(referent_addr), p2i(referent_addr ? --- 300,314 ---- return InstanceKlass::oop_ms_adjust_pointers(obj); } #ifdef ASSERT template <class T> static void trace_reference_gc(const char *s, oop obj, + bool is_ephemeron, T* referent_addr, T* next_addr, ! T* discovered_addr, ! T* value_addr) { if(TraceReferenceGC && PrintGCDetails) { gclog_or_tty->print_cr("%s obj " PTR_FORMAT, s, p2i(obj)); gclog_or_tty->print_cr(" referent_addr/* " PTR_FORMAT " / " PTR_FORMAT, p2i(referent_addr), p2i(referent_addr ?
*** 316,348 **** p2i(next_addr ? (address)oopDesc::load_decode_heap_oop(next_addr) : NULL)); gclog_or_tty->print_cr(" discovered_addr/* " PTR_FORMAT " / " PTR_FORMAT, p2i(discovered_addr), p2i(discovered_addr ? (address)oopDesc::load_decode_heap_oop(discovered_addr) : NULL)); } } #endif ! template <class T> void static adjust_object_specialized(oop obj) { T* referent_addr = (T*)java_lang_ref_Reference::referent_addr(obj); MarkSweep::adjust_pointer(referent_addr); T* next_addr = (T*)java_lang_ref_Reference::next_addr(obj); MarkSweep::adjust_pointer(next_addr); T* discovered_addr = (T*)java_lang_ref_Reference::discovered_addr(obj); MarkSweep::adjust_pointer(discovered_addr); ! debug_only(trace_reference_gc("InstanceRefKlass::oop_ms_adjust_pointers", obj, ! referent_addr, next_addr, discovered_addr);) } int InstanceRefKlass::oop_ms_adjust_pointers(oop obj) { int size = size_helper(); InstanceKlass::oop_ms_adjust_pointers(obj); if (UseCompressedOops) { ! adjust_object_specialized<narrowOop>(obj); } else { ! adjust_object_specialized<oop>(obj); } return size; } int ObjArrayKlass::oop_ms_adjust_pointers(oop obj) { --- 318,363 ---- p2i(next_addr ? (address)oopDesc::load_decode_heap_oop(next_addr) : NULL)); gclog_or_tty->print_cr(" discovered_addr/* " PTR_FORMAT " / " PTR_FORMAT, p2i(discovered_addr), p2i(discovered_addr ? (address)oopDesc::load_decode_heap_oop(discovered_addr) : NULL)); + if (is_ephemeron) { + gclog_or_tty->print_cr(" value_addr/* " PTR_FORMAT " / " + PTR_FORMAT, p2i(value_addr), + p2i(value_addr ? + (address)oopDesc::load_decode_heap_oop(value_addr) : NULL)); + } } } #endif ! template <class T> void static adjust_object_specialized(oop obj, InstanceRefKlass* klass) { T* referent_addr = (T*)java_lang_ref_Reference::referent_addr(obj); MarkSweep::adjust_pointer(referent_addr); T* next_addr = (T*)java_lang_ref_Reference::next_addr(obj); MarkSweep::adjust_pointer(next_addr); T* discovered_addr = (T*)java_lang_ref_Reference::discovered_addr(obj); MarkSweep::adjust_pointer(discovered_addr); ! if (klass->reference_type() == REF_EPHEMERON) { ! T* value_addr = (T*) java_lang_ref_Ephemeron::value_addr(obj); ! MarkSweep::adjust_pointer(value_addr); ! debug_only(trace_reference_gc("InstanceRefKlass<Ephemeron>::oop_ms_adjust_pointers", obj, true, ! referent_addr, next_addr, discovered_addr, value_addr);) ! } else { ! debug_only(trace_reference_gc("InstanceRefKlass::oop_ms_adjust_pointers", obj, false, ! referent_addr, next_addr, discovered_addr, (T*)NULL);) ! } } int InstanceRefKlass::oop_ms_adjust_pointers(oop obj) { int size = size_helper(); InstanceKlass::oop_ms_adjust_pointers(obj); if (UseCompressedOops) { ! adjust_object_specialized<narrowOop>(obj, this); } else { ! adjust_object_specialized<oop>(obj, this); } return size; } int ObjArrayKlass::oop_ms_adjust_pointers(oop obj) {
< prev index next >