// Make sure initial marks are correct.
ASSERT_MARK_WORD_EQ(o1.mark(), FakeOop::originalMark());
ASSERT_MARK_WORD_EQ(o2.mark(), FakeOop::originalMark());
ASSERT_MARK_WORD_EQ(o3.mark(), FakeOop::originalMark());
ASSERT_MARK_WORD_EQ(o4.mark(), FakeOop::originalMark());
// Change the marks and verify change.
o1.set_mark(FakeOop::changedMark());
o2.set_mark(FakeOop::changedMark());
ASSERT_MARK_WORD_EQ(o1.mark(), FakeOop::changedMark());
ASSERT_MARK_WORD_EQ(o2.mark(), FakeOop::changedMark());
// Push o1 and o2 to have their marks preserved.
pm.push_if_necessary(o1.get_oop(), o1.mark());
pm.push_if_necessary(o2.get_oop(), o2.mark());
// Fake a move from o1->o3 and o2->o4.
o1.forward_to(o3.get_oop());
o2.forward_to(o4.get_oop());
ASSERT_EQ(o1.get_oop()->forwardee(), o3.get_oop());
ASSERT_EQ(o2.get_oop()->forwardee(), o4.get_oop()); // Adjust will update the PreservedMarks stack to // make sure the mark is updated at the new location.
pm.adjust_during_full_gc();
// Restore all preserved and verify that the changed // mark is now present at o3 and o4.
pm.restore();
ASSERT_MARK_WORD_EQ(o3.mark(), FakeOop::changedMark());
ASSERT_MARK_WORD_EQ(o4.mark(), FakeOop::changedMark());
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.