< prev index next >

src/share/vm/oops/klass.cpp

Print this page
rev 14282 : Factor out keep-alive barrier from usual pre-barrier implementations.

*** 41,53 **** #include "runtime/atomic.hpp" #include "runtime/orderAccess.inline.hpp" #include "trace/traceMacros.hpp" #include "utilities/macros.hpp" #include "utilities/stack.inline.hpp" - #if INCLUDE_ALL_GCS - #include "gc/g1/g1SATBCardTableModRefBS.hpp" - #endif // INCLUDE_ALL_GCS bool Klass::is_cloneable() const { return _access_flags.is_cloneable_fast() || is_subtype_of(SystemDictionary::Cloneable_klass()); } --- 41,50 ----
*** 448,462 **** // This barrier is used by G1 to remember the old oop values, so // that we don't forget any objects that were live at the snapshot at // the beginning. This function is only used when we write oops into Klasses. void Klass::klass_update_barrier_set_pre(oop* p, oop v) { #if INCLUDE_ALL_GCS ! if (UseG1GC || (UseShenandoahGC && ShenandoahSATBBarrier)) { ! oop obj = *p; ! if (obj != NULL) { ! G1SATBCardTableModRefBS::enqueue(obj); ! } } #endif } void Klass::klass_oop_store(oop* p, oop v) { --- 445,457 ---- // This barrier is used by G1 to remember the old oop values, so // that we don't forget any objects that were live at the snapshot at // the beginning. This function is only used when we write oops into Klasses. void Klass::klass_update_barrier_set_pre(oop* p, oop v) { #if INCLUDE_ALL_GCS ! oop obj = oopDesc::load_heap_oop(p); ! if (! oopDesc::is_null(obj)) { ! oopDesc::bs()->keep_alive_barrier(obj); } #endif } void Klass::klass_oop_store(oop* p, oop v) {
< prev index next >