Mercurial > hg > truffle
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 |