< prev index next >

src/share/vm/gc/serial/markSweep.inline.hpp

Print this page

        

*** 35,44 **** --- 35,45 ---- #include "oops/objArrayKlass.inline.hpp" #include "utilities/macros.hpp" #include "utilities/stack.inline.hpp" #if INCLUDE_ALL_GCS #include "gc/g1/g1StringDedup.hpp" + #include "gc/g1/g1MarkSweep.hpp" #endif // INCLUDE_ALL_GCS inline void MarkSweep::mark_object(oop obj) { #if INCLUDE_ALL_GCS if (G1StringDedup::is_enabled()) {
*** 55,64 **** --- 56,74 ---- if (mark->must_be_preserved(obj)) { preserve_mark(obj, mark); } } + inline bool MarkSweep::is_archive_object(oop object) { + #if INCLUDE_ALL_GCS + return (G1MarkSweep::archive_check_enabled() && + G1MarkSweep::in_archive_range(object)); + #else + return false; + #endif + } + inline void MarkSweep::follow_klass(Klass* klass) { oop op = klass->klass_holder(); MarkSweep::mark_and_push(&op); }
*** 72,82 **** assert(!Universe::heap()->is_in_reserved(p), "roots shouldn't be things within the heap"); 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 (!obj->mark()->is_marked()) { mark_object(obj); follow_object(obj); } } follow_stack(); --- 82,93 ---- assert(!Universe::heap()->is_in_reserved(p), "roots shouldn't be things within the heap"); 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 (!obj->mark()->is_marked() && ! !is_archive_object(obj)) { mark_object(obj); follow_object(obj); } } follow_stack();
*** 85,95 **** template <class T> inline void MarkSweep::mark_and_push(T* p) { // assert(Universe::heap()->is_in_reserved(p), "should be in object space"); 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 (!obj->mark()->is_marked()) { mark_object(obj); _marking_stack.push(obj); } } } --- 96,107 ---- template <class T> inline void MarkSweep::mark_and_push(T* p) { // assert(Universe::heap()->is_in_reserved(p), "should be in object space"); 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 (!obj->mark()->is_marked() && ! !is_archive_object(obj)) { mark_object(obj); _marking_stack.push(obj); } } }
*** 109,129 **** if (!oopDesc::is_null(heap_oop)) { oop obj = oopDesc::decode_heap_oop_not_null(heap_oop); assert(Universe::heap()->is_in(obj), "should be in heap"); oop new_obj = oop(obj->mark()->decode_pointer()); ! assert(new_obj != NULL || // is forwarding ptr? obj->mark() == markOopDesc::prototype() || // not gc marked? (UseBiasedLocking && obj->mark()->has_bias_pattern()), // not gc marked? "should be forwarded"); if (new_obj != NULL) { assert(Universe::heap()->is_in_reserved(new_obj), "should be in object space"); oopDesc::encode_store_heap_oop_not_null(p, new_obj); } } } template <class T> inline void MarkSweep::KeepAliveClosure::do_oop_work(T* p) { mark_and_push(p); } --- 121,144 ---- if (!oopDesc::is_null(heap_oop)) { oop obj = oopDesc::decode_heap_oop_not_null(heap_oop); assert(Universe::heap()->is_in(obj), "should be in heap"); oop new_obj = oop(obj->mark()->decode_pointer()); ! assert(is_archive_object(obj) || // no forwarding of archive objects ! new_obj != NULL || // is forwarding ptr? obj->mark() == markOopDesc::prototype() || // not gc marked? (UseBiasedLocking && obj->mark()->has_bias_pattern()), // not gc marked? "should be forwarded"); if (new_obj != NULL) { + if (!is_archive_object(obj)) { assert(Universe::heap()->is_in_reserved(new_obj), "should be in object space"); oopDesc::encode_store_heap_oop_not_null(p, new_obj); } } + } } template <class T> inline void MarkSweep::KeepAliveClosure::do_oop_work(T* p) { mark_and_push(p); }
< prev index next >