mirror of
https://github.com/openjdk/jdk.git
synced 2026-03-13 01:13:10 +00:00
6758633: G1: SEGV with GCOld on Linux
Avoid growth of a GrowableArray backend of HeapRegionSeq. Reviewed-by: tonyp, jcoomes
This commit is contained in:
parent
04b0ebb9c1
commit
bc9f364917
@ -1398,7 +1398,7 @@ jint G1CollectedHeap::initialize() {
|
||||
_g1_storage.initialize(g1_rs, 0);
|
||||
_g1_committed = MemRegion((HeapWord*)_g1_storage.low(), (size_t) 0);
|
||||
_g1_max_committed = _g1_committed;
|
||||
_hrs = new HeapRegionSeq();
|
||||
_hrs = new HeapRegionSeq(_expansion_regions);
|
||||
guarantee(_hrs != NULL, "Couldn't allocate HeapRegionSeq");
|
||||
guarantee(_cur_alloc_region == NULL, "from constructor");
|
||||
|
||||
|
||||
@ -37,7 +37,7 @@ static int orderRegions(HeapRegion** hr1p, HeapRegion** hr2p) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
HeapRegionSeq::HeapRegionSeq() :
|
||||
HeapRegionSeq::HeapRegionSeq(const size_t max_size) :
|
||||
_alloc_search_start(0),
|
||||
// The line below is the worst bit of C++ hackery I've ever written
|
||||
// (Detlefs, 11/23). You should think of it as equivalent to
|
||||
@ -50,7 +50,7 @@ HeapRegionSeq::HeapRegionSeq() :
|
||||
_regions((ResourceObj::operator new (sizeof(GrowableArray<HeapRegion*>),
|
||||
(void*)&_regions,
|
||||
ResourceObj::C_HEAP),
|
||||
100),
|
||||
(int)max_size),
|
||||
true),
|
||||
_next_rr_candidate(0),
|
||||
_seq_bottom(NULL)
|
||||
@ -167,6 +167,7 @@ int HeapRegionSeq::find(HeapRegion* hr) {
|
||||
// Public methods.
|
||||
|
||||
void HeapRegionSeq::insert(HeapRegion* hr) {
|
||||
assert(!_regions.is_full(), "Too many elements in HeapRegionSeq");
|
||||
if (_regions.length() == 0
|
||||
|| _regions.top()->end() <= hr->bottom()) {
|
||||
hr->set_hrs_index(_regions.length());
|
||||
|
||||
@ -49,7 +49,7 @@ class HeapRegionSeq: public CHeapObj {
|
||||
|
||||
public:
|
||||
// Initializes "this" to the empty sequence of regions.
|
||||
HeapRegionSeq();
|
||||
HeapRegionSeq(const size_t max_size);
|
||||
|
||||
// Adds "hr" to "this" sequence. Requires "hr" not to overlap with
|
||||
// any region already in "this". (Will perform better if regions are
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user