< prev index next >

src/hotspot/share/gc/parallel/psParallelCompact.hpp

Print this page




 567 inline bool ParallelCompactData::RegionData::claim_unsafe()
 568 {
 569   if (available()) {
 570     _dc_and_los |= dc_claimed;
 571     return true;
 572   }
 573   return false;
 574 }
 575 
 576 inline void ParallelCompactData::RegionData::add_live_obj(size_t words)
 577 {
 578   assert(words <= (size_t)los_mask - live_obj_size(), "overflow");
 579   Atomic::add(&_dc_and_los, static_cast<region_sz_t>(words));
 580 }
 581 
 582 inline void ParallelCompactData::RegionData::set_highest_ref(HeapWord* addr)
 583 {
 584 #ifdef ASSERT
 585   HeapWord* tmp = _highest_ref;
 586   while (addr > tmp) {
 587     tmp = Atomic::cmpxchg(addr, &_highest_ref, tmp);
 588   }
 589 #endif  // #ifdef ASSERT
 590 }
 591 
 592 inline bool ParallelCompactData::RegionData::claim()
 593 {
 594   const region_sz_t los = static_cast<region_sz_t>(live_obj_size());
 595   const region_sz_t old = Atomic::cmpxchg(dc_claimed | los, &_dc_and_los, los);
 596   return old == los;
 597 }
 598 
 599 inline ParallelCompactData::RegionData*
 600 ParallelCompactData::region(size_t region_idx) const
 601 {
 602   assert(region_idx <= region_count(), "bad arg");
 603   return _region_data + region_idx;
 604 }
 605 
 606 inline size_t
 607 ParallelCompactData::region(const RegionData* const region_ptr) const
 608 {
 609   assert(region_ptr >= _region_data, "bad arg");
 610   assert(region_ptr <= _region_data + region_count(), "bad arg");
 611   return pointer_delta(region_ptr, _region_data, sizeof(RegionData));
 612 }
 613 
 614 inline ParallelCompactData::BlockData*
 615 ParallelCompactData::block(size_t n) const {




 567 inline bool ParallelCompactData::RegionData::claim_unsafe()
 568 {
 569   if (available()) {
 570     _dc_and_los |= dc_claimed;
 571     return true;
 572   }
 573   return false;
 574 }
 575 
 576 inline void ParallelCompactData::RegionData::add_live_obj(size_t words)
 577 {
 578   assert(words <= (size_t)los_mask - live_obj_size(), "overflow");
 579   Atomic::add(&_dc_and_los, static_cast<region_sz_t>(words));
 580 }
 581 
 582 inline void ParallelCompactData::RegionData::set_highest_ref(HeapWord* addr)
 583 {
 584 #ifdef ASSERT
 585   HeapWord* tmp = _highest_ref;
 586   while (addr > tmp) {
 587     tmp = Atomic::cmpxchg(&_highest_ref, tmp, addr);
 588   }
 589 #endif  // #ifdef ASSERT
 590 }
 591 
 592 inline bool ParallelCompactData::RegionData::claim()
 593 {
 594   const region_sz_t los = static_cast<region_sz_t>(live_obj_size());
 595   const region_sz_t old = Atomic::cmpxchg(&_dc_and_los, los, dc_claimed | los);
 596   return old == los;
 597 }
 598 
 599 inline ParallelCompactData::RegionData*
 600 ParallelCompactData::region(size_t region_idx) const
 601 {
 602   assert(region_idx <= region_count(), "bad arg");
 603   return _region_data + region_idx;
 604 }
 605 
 606 inline size_t
 607 ParallelCompactData::region(const RegionData* const region_ptr) const
 608 {
 609   assert(region_ptr >= _region_data, "bad arg");
 610   assert(region_ptr <= _region_data + region_count(), "bad arg");
 611   return pointer_delta(region_ptr, _region_data, sizeof(RegionData));
 612 }
 613 
 614 inline ParallelCompactData::BlockData*
 615 ParallelCompactData::block(size_t n) const {


< prev index next >