< prev index next >

src/hotspot/share/gc/parallel/psPromotionManager.inline.hpp

Print this page

        

*** 31,40 **** --- 31,41 ---- #include "gc/parallel/psPromotionLAB.inline.hpp" #include "gc/parallel/psPromotionManager.hpp" #include "gc/parallel/psScavenge.hpp" #include "gc/shared/taskqueue.inline.hpp" #include "logging/log.hpp" + #include "oops/access.inline.hpp" #include "oops/oop.inline.hpp" inline PSPromotionManager* PSPromotionManager::manager_array(uint index) { assert(_manager_array != NULL, "access of NULL manager_array"); assert(index <= ParallelGCThreads, "out of range manager_array access");
*** 47,64 **** } template <class T> inline void PSPromotionManager::claim_or_forward_internal_depth(T* p) { if (p != NULL) { // XXX: error if p != NULL here ! oop o = oopDesc::load_decode_heap_oop_not_null(p); if (o->is_forwarded()) { o = o->forwardee(); // Card mark if (PSScavenge::is_obj_in_young(o)) { PSScavenge::card_table()->inline_write_ref_field_gc(p, o); } ! oopDesc::encode_store_heap_oop_not_null(p, o); } else { push_depth(p); } } } --- 48,65 ---- } template <class T> inline void PSPromotionManager::claim_or_forward_internal_depth(T* p) { if (p != NULL) { // XXX: error if p != NULL here ! oop o = RawAccess<OOP_NOT_NULL>::oop_load(p); if (o->is_forwarded()) { o = o->forwardee(); // Card mark if (PSScavenge::is_obj_in_young(o)) { PSScavenge::card_table()->inline_write_ref_field_gc(p, o); } ! RawAccess<OOP_NOT_NULL>::oop_store(p, o); } else { push_depth(p); } } }
*** 276,286 **** // attempting marking. template <class T, bool promote_immediately> inline void PSPromotionManager::copy_and_push_safe_barrier(T* p) { assert(should_scavenge(p, true), "revisiting object?"); ! oop o = oopDesc::load_decode_heap_oop_not_null(p); oop new_obj = o->is_forwarded() ? o->forwardee() : copy_to_survivor_space<promote_immediately>(o); // This code must come after the CAS test, or it will print incorrect --- 277,287 ---- // attempting marking. template <class T, bool promote_immediately> inline void PSPromotionManager::copy_and_push_safe_barrier(T* p) { assert(should_scavenge(p, true), "revisiting object?"); ! oop o = RawAccess<OOP_NOT_NULL>::oop_load(p); oop new_obj = o->is_forwarded() ? o->forwardee() : copy_to_survivor_space<promote_immediately>(o); // This code must come after the CAS test, or it will print incorrect
*** 289,299 **** log_develop_trace(gc, scavenge)("{%s %s " PTR_FORMAT " -> " PTR_FORMAT " (%d)}", "forwarding", new_obj->klass()->internal_name(), p2i((void *)o), p2i((void *)new_obj), new_obj->size()); } ! oopDesc::encode_store_heap_oop_not_null(p, new_obj); // We cannot mark without test, as some code passes us pointers // that are outside the heap. These pointers are either from roots // or from metadata. if ((!PSScavenge::is_obj_in_young((HeapWord*)p)) && --- 290,300 ---- log_develop_trace(gc, scavenge)("{%s %s " PTR_FORMAT " -> " PTR_FORMAT " (%d)}", "forwarding", new_obj->klass()->internal_name(), p2i((void *)o), p2i((void *)new_obj), new_obj->size()); } ! RawAccess<OOP_NOT_NULL>::oop_store(p, new_obj); // We cannot mark without test, as some code passes us pointers // that are outside the heap. These pointers are either from roots // or from metadata. if ((!PSScavenge::is_obj_in_young((HeapWord*)p)) &&
< prev index next >