1695 o->set_mark(mark);
1696 }
1697
1698 if (UseBiasedLocking) {
1699 BiasedLocking::restore_marks();
1700 }
1701
1702 // free the stacks
1703 delete _saved_oop_stack;
1704 delete _saved_mark_stack;
1705 }
1706
1707 // mark an object
1708 inline void ObjectMarker::mark(oop o) {
1709 assert(Universe::heap()->is_in(o), "sanity check");
1710 assert(!o->mark().is_marked(), "should only mark an object once");
1711
1712 // object's mark word
1713 markWord mark = o->mark();
1714
1715 if (mark.must_be_preserved(o)) {
1716 _saved_mark_stack->push(mark);
1717 _saved_oop_stack->push(o);
1718 }
1719
1720 // mark the object
1721 o->set_mark(markWord::prototype().set_marked());
1722 }
1723
1724 // return true if object is marked
1725 inline bool ObjectMarker::visited(oop o) {
1726 return o->mark().is_marked();
1727 }
1728
1729 // Stack allocated class to help ensure that ObjectMarker is used
1730 // correctly. Constructor initializes ObjectMarker, destructor calls
1731 // ObjectMarker's done() function to restore object headers.
1732 class ObjectMarkerController : public StackObj {
1733 public:
1734 ObjectMarkerController() {
1735 ObjectMarker::init();
|
1695 o->set_mark(mark);
1696 }
1697
1698 if (UseBiasedLocking) {
1699 BiasedLocking::restore_marks();
1700 }
1701
1702 // free the stacks
1703 delete _saved_oop_stack;
1704 delete _saved_mark_stack;
1705 }
1706
1707 // mark an object
1708 inline void ObjectMarker::mark(oop o) {
1709 assert(Universe::heap()->is_in(o), "sanity check");
1710 assert(!o->mark().is_marked(), "should only mark an object once");
1711
1712 // object's mark word
1713 markWord mark = o->mark();
1714
1715 if (o->mark_must_be_preserved(mark)) {
1716 _saved_mark_stack->push(mark);
1717 _saved_oop_stack->push(o);
1718 }
1719
1720 // mark the object
1721 o->set_mark(markWord::prototype().set_marked());
1722 }
1723
1724 // return true if object is marked
1725 inline bool ObjectMarker::visited(oop o) {
1726 return o->mark().is_marked();
1727 }
1728
1729 // Stack allocated class to help ensure that ObjectMarker is used
1730 // correctly. Constructor initializes ObjectMarker, destructor calls
1731 // ObjectMarker's done() function to restore object headers.
1732 class ObjectMarkerController : public StackObj {
1733 public:
1734 ObjectMarkerController() {
1735 ObjectMarker::init();
|