< prev index next >
src/share/vm/gc/shenandoah/shenandoahMarkCompact.cpp
Print this page
rev 13086 : [mq]: partial-fixfullgc.patch
@@ -500,10 +500,11 @@
}
class ShenandoahAdjustPointersClosure : public MetadataAwareOopClosure {
private:
ShenandoahHeap* _heap;
+ size_t _new_obj_offset;
public:
ShenandoahAdjustPointersClosure() : _heap(ShenandoahHeap::heap()) {
}
@@ -517,11 +518,11 @@
oop forw = oop(BrooksPointer::get_raw(obj));
oopDesc::encode_store_heap_oop(p, forw);
if (UseShenandoahMatrix) {
if (_heap->is_in_reserved(p)) {
assert(_heap->is_in_reserved(forw), "must be in heap");
- _heap->connection_matrix()->set_connected(p, forw);
+ _heap->connection_matrix()->set_connected(((HeapWord*) p) - _new_obj_offset, forw);
}
}
}
}
public:
@@ -529,10 +530,13 @@
do_oop_work(p);
}
void do_oop(narrowOop* p) {
do_oop_work(p);
}
+ void set_new_obj_offset(size_t new_obj_offset) {
+ _new_obj_offset = new_obj_offset;
+ }
};
class ShenandoahAdjustPointersObjectClosure : public ObjectClosure {
private:
ShenandoahAdjustPointersClosure _cl;
@@ -541,12 +545,12 @@
ShenandoahAdjustPointersObjectClosure() :
_heap(ShenandoahHeap::heap()) {
}
void do_object(oop p) {
assert(_heap->is_marked_complete(p), "must be marked");
- oop forw = oop(BrooksPointer::get_raw(p));
- uint from_idx = _heap->heap_region_index_containing(forw);
+ HeapWord* forw = BrooksPointer::get_raw(p);
+ _cl.set_new_obj_offset(pointer_delta((HeapWord*) p, forw));
p->oop_iterate(&_cl);
}
};
class ShenandoahAdjustPointersTask : public AbstractGangTask {
< prev index next >