< prev index next >

src/hotspot/share/gc/cms/promotionInfo.cpp

Print this page

        

*** 25,36 **** #include "precompiled.hpp" #include "gc/cms/compactibleFreeListSpace.hpp" #include "gc/cms/promotionInfo.hpp" #include "gc/shared/genOopClosures.hpp" #include "oops/compressedOops.inline.hpp" ! #include "oops/markWord.inline.hpp" ! #include "oops/oop.inline.hpp" ///////////////////////////////////////////////////////////////////////// //// PromotionInfo ///////////////////////////////////////////////////////////////////////// --- 25,36 ---- #include "precompiled.hpp" #include "gc/cms/compactibleFreeListSpace.hpp" #include "gc/cms/promotionInfo.hpp" #include "gc/shared/genOopClosures.hpp" #include "oops/compressedOops.inline.hpp" ! #include "oops/markOop.inline.hpp" ! #include "oops/oop.hpp" ///////////////////////////////////////////////////////////////////////// //// PromotionInfo /////////////////////////////////////////////////////////////////////////
*** 60,75 **** assert(!((FreeChunk*)this)->is_free(), "Error"); } // Return the next displaced header, incrementing the pointer and // recycling spool area as necessary. ! markWord PromotionInfo::nextDisplacedHeader() { assert(_spoolHead != NULL, "promotionInfo inconsistency"); assert(_spoolHead != _spoolTail || _firstIndex < _nextIndex, "Empty spool space: no displaced header can be fetched"); assert(_spoolHead->bufferSize > _firstIndex, "Off by one error at head?"); ! markWord hdr = _spoolHead->displacedHdr[_firstIndex]; // Spool forward if (++_firstIndex == _spoolHead->bufferSize) { // last location in this block // forward to next block, recycling this block into spare spool buffer SpoolBlock* tmp = _spoolHead->nextSpoolBlock; assert(_spoolHead != _spoolTail, "Spooling storage mix-up"); --- 60,75 ---- assert(!((FreeChunk*)this)->is_free(), "Error"); } // Return the next displaced header, incrementing the pointer and // recycling spool area as necessary. ! markOop PromotionInfo::nextDisplacedHeader() { assert(_spoolHead != NULL, "promotionInfo inconsistency"); assert(_spoolHead != _spoolTail || _firstIndex < _nextIndex, "Empty spool space: no displaced header can be fetched"); assert(_spoolHead->bufferSize > _firstIndex, "Off by one error at head?"); ! markOop hdr = _spoolHead->displacedHdr[_firstIndex]; // Spool forward if (++_firstIndex == _spoolHead->bufferSize) { // last location in this block // forward to next block, recycling this block into spare spool buffer SpoolBlock* tmp = _spoolHead->nextSpoolBlock; assert(_spoolHead != _spoolTail, "Spooling storage mix-up");
*** 91,109 **** track(trackOop, oop(trackOop)->klass()); } void PromotionInfo::track(PromotedObject* trackOop, Klass* klassOfOop) { // make a copy of header as it may need to be spooled ! markWord mark = oop(trackOop)->mark_raw(); trackOop->clear_next(); ! if (mark.must_be_preserved_for_cms_scavenge(klassOfOop)) { // save non-prototypical header, and mark oop saveDisplacedHeader(mark); trackOop->setDisplacedMark(); } else { // we'd like to assert something like the following: ! // assert(mark == markWord::prototype(), "consistency check"); // ... but the above won't work because the age bits have not (yet) been // cleared. The remainder of the check would be identical to the // condition checked in must_be_preserved() above, so we don't really // have anything useful to check here! } --- 91,109 ---- track(trackOop, oop(trackOop)->klass()); } void PromotionInfo::track(PromotedObject* trackOop, Klass* klassOfOop) { // make a copy of header as it may need to be spooled ! markOop mark = oop(trackOop)->mark_raw(); trackOop->clear_next(); ! if (mark->must_be_preserved_for_cms_scavenge(klassOfOop)) { // save non-prototypical header, and mark oop saveDisplacedHeader(mark); trackOop->setDisplacedMark(); } else { // we'd like to assert something like the following: ! // assert(mark == markOopDesc::prototype(), "consistency check"); // ... but the above won't work because the age bits have not (yet) been // cleared. The remainder of the check would be identical to the // condition checked in must_be_preserved() above, so we don't really // have anything useful to check here! }
*** 121,131 **** trackOop->setPromotedMark(); } // Save the given displaced header, incrementing the pointer and // obtaining more spool area as necessary. ! void PromotionInfo::saveDisplacedHeader(markWord hdr) { assert(_spoolHead != NULL && _spoolTail != NULL, "promotionInfo inconsistency"); assert(_spoolTail->bufferSize > _nextIndex, "Off by one error at tail?"); _spoolTail->displacedHdr[_nextIndex] = hdr; // Spool forward --- 121,131 ---- trackOop->setPromotedMark(); } // Save the given displaced header, incrementing the pointer and // obtaining more spool area as necessary. ! void PromotionInfo::saveDisplacedHeader(markOop hdr) { assert(_spoolHead != NULL && _spoolTail != NULL, "promotionInfo inconsistency"); assert(_spoolTail->bufferSize > _nextIndex, "Off by one error at tail?"); _spoolTail->displacedHdr[_nextIndex] = hdr; // Spool forward
< prev index next >