comparison src/share/vm/gc_implementation/g1/heapRegionSeq.inline.hpp @ 12305:a19bea467577

7163191: G1: introduce a "heap spanning table" abstraction Summary: Add G1BiasedArray<T> that is an array where each element represents a fixed-sized subdivision of the heap. Use this abstraction to refactor the HeapRegionSeq class. Reviewed-by: brutisso
author tschatzl
date Wed, 25 Sep 2013 13:25:24 +0200
parents 720b6a76dd9d
children de6a9e811145
comparison
equal deleted inserted replaced
12304:10cc3b624f8f 12305:a19bea467577
26 #define SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONSEQ_INLINE_HPP 26 #define SHARE_VM_GC_IMPLEMENTATION_G1_HEAPREGIONSEQ_INLINE_HPP
27 27
28 #include "gc_implementation/g1/heapRegion.hpp" 28 #include "gc_implementation/g1/heapRegion.hpp"
29 #include "gc_implementation/g1/heapRegionSeq.hpp" 29 #include "gc_implementation/g1/heapRegionSeq.hpp"
30 30
31 inline uintx HeapRegionSeq::addr_to_index_biased(HeapWord* addr) const {
32 assert(_heap_bottom <= addr && addr < _heap_end,
33 err_msg("addr: "PTR_FORMAT" bottom: "PTR_FORMAT" end: "PTR_FORMAT,
34 addr, _heap_bottom, _heap_end));
35 uintx index = (uintx) addr >> _region_shift;
36 return index;
37 }
38
39 inline HeapRegion* HeapRegionSeq::addr_to_region_unsafe(HeapWord* addr) const { 31 inline HeapRegion* HeapRegionSeq::addr_to_region_unsafe(HeapWord* addr) const {
40 assert(_heap_bottom <= addr && addr < _heap_end, 32 HeapRegion* hr = _regions.get_by_address(addr);
41 err_msg("addr: "PTR_FORMAT" bottom: "PTR_FORMAT" end: "PTR_FORMAT,
42 addr, _heap_bottom, _heap_end));
43 uintx index_biased = addr_to_index_biased(addr);
44 HeapRegion* hr = _regions_biased[index_biased];
45 assert(hr != NULL, "invariant"); 33 assert(hr != NULL, "invariant");
46 return hr; 34 return hr;
47 } 35 }
48 36
49 inline HeapRegion* HeapRegionSeq::addr_to_region(HeapWord* addr) const { 37 inline HeapRegion* HeapRegionSeq::addr_to_region(HeapWord* addr) const {
50 if (addr != NULL && addr < _heap_end) { 38 if (addr != NULL && addr < heap_end()) {
51 assert(addr >= _heap_bottom, 39 assert(addr >= heap_bottom(),
52 err_msg("addr: "PTR_FORMAT" bottom: "PTR_FORMAT, addr, _heap_bottom)); 40 err_msg("addr: "PTR_FORMAT" bottom: "PTR_FORMAT, addr, heap_bottom()));
53 return addr_to_region_unsafe(addr); 41 return addr_to_region_unsafe(addr);
54 } 42 }
55 return NULL; 43 return NULL;
56 } 44 }
57 45
58 inline HeapRegion* HeapRegionSeq::at(uint index) const { 46 inline HeapRegion* HeapRegionSeq::at(uint index) const {
59 assert(index < length(), "pre-condition"); 47 assert(index < length(), "pre-condition");
60 HeapRegion* hr = _regions[index]; 48 HeapRegion* hr = _regions.get_by_index(index);
61 assert(hr != NULL, "sanity"); 49 assert(hr != NULL, "sanity");
62 assert(hr->hrs_index() == index, "sanity"); 50 assert(hr->hrs_index() == index, "sanity");
63 return hr; 51 return hr;
64 } 52 }
65 53