< prev index next >

src/hotspot/share/gc/g1/g1RegionMarkStatsCache.inline.hpp

Print this page




  29 #include "runtime/atomic.hpp"
  30 
  31 inline G1RegionMarkStatsCache::G1RegionMarkStatsCacheEntry* G1RegionMarkStatsCache::find_for_add(uint region_idx) {
  32   uint const cache_idx = hash(region_idx);
  33 
  34   G1RegionMarkStatsCacheEntry* cur = &_cache[cache_idx];
  35   if (cur->_region_idx != region_idx) {
  36     evict(cache_idx);
  37     cur->_region_idx = region_idx;
  38     _cache_misses++;
  39   } else {
  40     _cache_hits++;
  41   }
  42 
  43   return cur;
  44 }
  45 
  46 inline void G1RegionMarkStatsCache::evict(uint idx) {
  47   G1RegionMarkStatsCacheEntry* cur = &_cache[idx];
  48   if (cur->_stats._live_words != 0) {
  49     Atomic::add(cur->_stats._live_words, &_target[cur->_region_idx]._live_words);
  50   }
  51   cur->clear();
  52 }
  53 
  54 #endif // SHARE_GC_G1_G1REGIONMARKSTATSCACHE_INLINE_HPP


  29 #include "runtime/atomic.hpp"
  30 
  31 inline G1RegionMarkStatsCache::G1RegionMarkStatsCacheEntry* G1RegionMarkStatsCache::find_for_add(uint region_idx) {
  32   uint const cache_idx = hash(region_idx);
  33 
  34   G1RegionMarkStatsCacheEntry* cur = &_cache[cache_idx];
  35   if (cur->_region_idx != region_idx) {
  36     evict(cache_idx);
  37     cur->_region_idx = region_idx;
  38     _cache_misses++;
  39   } else {
  40     _cache_hits++;
  41   }
  42 
  43   return cur;
  44 }
  45 
  46 inline void G1RegionMarkStatsCache::evict(uint idx) {
  47   G1RegionMarkStatsCacheEntry* cur = &_cache[idx];
  48   if (cur->_stats._live_words != 0) {
  49     Atomic::add(&_target[cur->_region_idx]._live_words, cur->_stats._live_words);
  50   }
  51   cur->clear();
  52 }
  53 
  54 #endif // SHARE_GC_G1_G1REGIONMARKSTATSCACHE_INLINE_HPP
< prev index next >