< prev index next >

src/hotspot/share/prims/jvmtiTagMap.cpp

Print this page

1450 
1451   // free the stacks
1452   delete _saved_oop_stack;
1453   delete _saved_mark_stack;
1454 }
1455 
1456 // mark an object
1457 inline void ObjectMarker::mark(oop o) {
1458   assert(Universe::heap()->is_in(o), "sanity check");
1459   assert(!o->mark().is_marked(), "should only mark an object once");
1460 
1461   // object's mark word
1462   markWord mark = o->mark();
1463 
1464   if (o->mark_must_be_preserved(mark)) {
1465     _saved_mark_stack->push(mark);
1466     _saved_oop_stack->push(o);
1467   }
1468 
1469   // mark the object
1470   o->set_mark(markWord::prototype().set_marked());



1471 }
1472 
1473 // return true if object is marked
1474 inline bool ObjectMarker::visited(oop o) {
1475   return o->mark().is_marked();
1476 }
1477 
1478 // Stack allocated class to help ensure that ObjectMarker is used
1479 // correctly. Constructor initializes ObjectMarker, destructor calls
1480 // ObjectMarker's done() function to restore object headers.
1481 class ObjectMarkerController : public StackObj {
1482  public:
1483   ObjectMarkerController() {
1484     ObjectMarker::init();
1485   }
1486   ~ObjectMarkerController() {
1487     ObjectMarker::done();
1488   }
1489 };
1490 

1450 
1451   // free the stacks
1452   delete _saved_oop_stack;
1453   delete _saved_mark_stack;
1454 }
1455 
1456 // mark an object
1457 inline void ObjectMarker::mark(oop o) {
1458   assert(Universe::heap()->is_in(o), "sanity check");
1459   assert(!o->mark().is_marked(), "should only mark an object once");
1460 
1461   // object's mark word
1462   markWord mark = o->mark();
1463 
1464   if (o->mark_must_be_preserved(mark)) {
1465     _saved_mark_stack->push(mark);
1466     _saved_oop_stack->push(o);
1467   }
1468 
1469   // mark the object
1470   if (mark.has_displaced_mark_helper()) {
1471     mark = mark.displaced_mark_helper();
1472   }
1473   o->set_mark(mark.set_marked());
1474 }
1475 
1476 // return true if object is marked
1477 inline bool ObjectMarker::visited(oop o) {
1478   return o->mark().is_marked();
1479 }
1480 
1481 // Stack allocated class to help ensure that ObjectMarker is used
1482 // correctly. Constructor initializes ObjectMarker, destructor calls
1483 // ObjectMarker's done() function to restore object headers.
1484 class ObjectMarkerController : public StackObj {
1485  public:
1486   ObjectMarkerController() {
1487     ObjectMarker::init();
1488   }
1489   ~ObjectMarkerController() {
1490     ObjectMarker::done();
1491   }
1492 };
1493 
< prev index next >