< prev index next >

src/hotspot/share/gc/cms/parNewGeneration.cpp

Print this page

        

*** 49,58 **** --- 49,60 ---- #include "gc/shared/weakProcessor.hpp" #include "gc/shared/workgroup.hpp" #include "logging/log.hpp" #include "logging/logStream.hpp" #include "memory/resourceArea.hpp" + #include "oops/access.inline.hpp" + #include "oops/compressedOops.inline.hpp" #include "oops/objArrayOop.hpp" #include "oops/oop.inline.hpp" #include "runtime/atomic.hpp" #include "runtime/handles.hpp" #include "runtime/handles.inline.hpp"
*** 677,698 **** template <class T> void /*ParNewGeneration::*/ParKeepAliveClosure::do_oop_work(T* p) { #ifdef ASSERT { ! assert(!oopDesc::is_null(*p), "expected non-null ref"); ! oop obj = oopDesc::load_decode_heap_oop_not_null(p); // We never expect to see a null reference being processed // as a weak reference. assert(oopDesc::is_oop(obj), "expected an oop while scanning weak refs"); } #endif // ASSERT _par_cl->do_oop_nv(p); if (CMSHeap::heap()->is_in_reserved(p)) { ! oop obj = oopDesc::load_decode_heap_oop_not_null(p); _rs->write_ref_field_gc_par(p, obj); } } void /*ParNewGeneration::*/ParKeepAliveClosure::do_oop(oop* p) { ParKeepAliveClosure::do_oop_work(p); } --- 679,699 ---- template <class T> void /*ParNewGeneration::*/ParKeepAliveClosure::do_oop_work(T* p) { #ifdef ASSERT { ! oop obj = RawAccess<OOP_NOT_NULL>::oop_load(p); // We never expect to see a null reference being processed // as a weak reference. assert(oopDesc::is_oop(obj), "expected an oop while scanning weak refs"); } #endif // ASSERT _par_cl->do_oop_nv(p); if (CMSHeap::heap()->is_in_reserved(p)) { ! oop obj = RawAccess<OOP_NOT_NULL>::oop_load(p);; _rs->write_ref_field_gc_par(p, obj); } } void /*ParNewGeneration::*/ParKeepAliveClosure::do_oop(oop* p) { ParKeepAliveClosure::do_oop_work(p); }
*** 704,742 **** template <class T> void /*ParNewGeneration::*/KeepAliveClosure::do_oop_work(T* p) { #ifdef ASSERT { ! assert(!oopDesc::is_null(*p), "expected non-null ref"); ! oop obj = oopDesc::load_decode_heap_oop_not_null(p); // We never expect to see a null reference being processed // as a weak reference. assert(oopDesc::is_oop(obj), "expected an oop while scanning weak refs"); } #endif // ASSERT _cl->do_oop_nv(p); if (CMSHeap::heap()->is_in_reserved(p)) { ! oop obj = oopDesc::load_decode_heap_oop_not_null(p); _rs->write_ref_field_gc_par(p, obj); } } void /*ParNewGeneration::*/KeepAliveClosure::do_oop(oop* p) { KeepAliveClosure::do_oop_work(p); } void /*ParNewGeneration::*/KeepAliveClosure::do_oop(narrowOop* p) { KeepAliveClosure::do_oop_work(p); } template <class T> void ScanClosureWithParBarrier::do_oop_work(T* p) { ! T heap_oop = oopDesc::load_heap_oop(p); ! if (!oopDesc::is_null(heap_oop)) { ! oop obj = oopDesc::decode_heap_oop_not_null(heap_oop); if ((HeapWord*)obj < _boundary) { assert(!_g->to()->is_in_reserved(obj), "Scanning field twice?"); oop new_obj = obj->is_forwarded() ? obj->forwardee() : _g->DefNewGeneration::copy_to_survivor_space(obj); ! oopDesc::encode_store_heap_oop_not_null(p, new_obj); } if (_gc_barrier) { // If p points to a younger generation, mark the card. if ((HeapWord*)obj < _gen_boundary) { _rs->write_ref_field_gc_par(p, obj); --- 705,742 ---- template <class T> void /*ParNewGeneration::*/KeepAliveClosure::do_oop_work(T* p) { #ifdef ASSERT { ! oop obj = RawAccess<OOP_NOT_NULL>::oop_load(p); // We never expect to see a null reference being processed // as a weak reference. assert(oopDesc::is_oop(obj), "expected an oop while scanning weak refs"); } #endif // ASSERT _cl->do_oop_nv(p); if (CMSHeap::heap()->is_in_reserved(p)) { ! oop obj = RawAccess<OOP_NOT_NULL>::oop_load(p); _rs->write_ref_field_gc_par(p, obj); } } void /*ParNewGeneration::*/KeepAliveClosure::do_oop(oop* p) { KeepAliveClosure::do_oop_work(p); } void /*ParNewGeneration::*/KeepAliveClosure::do_oop(narrowOop* p) { KeepAliveClosure::do_oop_work(p); } template <class T> void ScanClosureWithParBarrier::do_oop_work(T* p) { ! T heap_oop = RawAccess<>::oop_load(p); ! if (!CompressedOops::is_null(heap_oop)) { ! oop obj = CompressedOops::decode_not_null(heap_oop); if ((HeapWord*)obj < _boundary) { assert(!_g->to()->is_in_reserved(obj), "Scanning field twice?"); oop new_obj = obj->is_forwarded() ? obj->forwardee() : _g->DefNewGeneration::copy_to_survivor_space(obj); ! RawAccess<>::oop_store(p, new_obj); } if (_gc_barrier) { // If p points to a younger generation, mark the card. if ((HeapWord*)obj < _gen_boundary) { _rs->write_ref_field_gc_par(p, obj);
< prev index next >