< prev index next >
src/hotspot/share/gc/serial/markSweep.inline.hpp
Print this page
*** 27,46 ****
#include "gc/serial/markSweep.hpp"
#include "memory/metaspaceShared.hpp"
#include "memory/universe.hpp"
#include "oops/markOop.inline.hpp"
#include "oops/oop.inline.hpp"
inline int MarkSweep::adjust_pointers(oop obj) {
return obj->oop_iterate_size(&MarkSweep::adjust_pointer_closure);
}
template <class T> inline void MarkSweep::adjust_pointer(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);
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?
--- 27,48 ----
#include "gc/serial/markSweep.hpp"
#include "memory/metaspaceShared.hpp"
#include "memory/universe.hpp"
#include "oops/markOop.inline.hpp"
+ #include "oops/access.inline.hpp"
+ #include "oops/compressedOops.inline.hpp"
#include "oops/oop.inline.hpp"
inline int MarkSweep::adjust_pointers(oop obj) {
return obj->oop_iterate_size(&MarkSweep::adjust_pointer_closure);
}
template <class T> inline void MarkSweep::adjust_pointer(T* p) {
! T heap_oop = RawAccess<>::oop_load(p);
! if (!CompressedOops::is_null(heap_oop)) {
! oop obj = CompressedOops::decode_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?
*** 50,60 ****
"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);
}
}
}
#endif // SHARE_VM_GC_SERIAL_MARKSWEEP_INLINE_HPP
--- 52,62 ----
"should be forwarded");
if (new_obj != NULL) {
assert(Universe::heap()->is_in_reserved(new_obj),
"should be in object space");
! RawAccess<OOP_NOT_NULL>::oop_store(p, new_obj);
}
}
}
#endif // SHARE_VM_GC_SERIAL_MARKSWEEP_INLINE_HPP
< prev index next >