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
|