--- old/src/share/vm/memory/genCollectedHeap.cpp 2014-10-17 15:34:52.000000000 +0200 +++ new/src/share/vm/memory/genCollectedHeap.cpp 2014-10-17 15:34:52.000000000 +0200 @@ -95,16 +95,6 @@ // HeapWordSize). guarantee(HeapWordSize == wordSize, "HeapWordSize must equal wordSize"); - // The heap must be at least as aligned as generations. - size_t gen_alignment = Generation::GenGrain; - - _gen_specs = gen_policy()->generations(); - - // Make sure the sizes are all aligned. - for (i = 0; i < _n_gens; i++) { - _gen_specs[i]->align(gen_alignment); - } - // Allocate space for the heap. char* heap_address; @@ -130,13 +120,14 @@ _gch = this; - ReservedSpace young_rs = heap_rs.first_part(_gen_specs[0]->max_size(), false, false); - _young_gen = _gen_specs[0]->init(young_rs, 0, rem_set()); - heap_rs = heap_rs.last_part(_gen_specs[0]->max_size()); - - ReservedSpace old_rs = heap_rs.first_part(_gen_specs[1]->max_size(), false, false); - _old_gen = _gen_specs[1]->init(old_rs, 1, rem_set()); - heap_rs = heap_rs.last_part(_gen_specs[1]->max_size()); + ReservedSpace young_rs = heap_rs.first_part(gen_policy()->young_gen_spec()->max_size(), false, false); + _young_gen = gen_policy()->young_gen_spec()->init(young_rs, 0, rem_set()); + heap_rs = heap_rs.last_part(gen_policy()->young_gen_spec()->max_size()); + + ReservedSpace old_rs = heap_rs.first_part(gen_policy()->old_gen_spec()->max_size(), false, false); + _old_gen = gen_policy()->old_gen_spec()->init(old_rs, 1, rem_set()); + heap_rs = heap_rs.last_part(gen_policy()->old_gen_spec()->max_size()); + clear_incremental_collection_failed(); #if INCLUDE_ALL_GCS @@ -159,24 +150,22 @@ "the maximum representable size"; // Now figure out the total size. - size_t total_reserved = 0; - int n_covered_regions = 0; - const size_t pageSize = UseLargePages ? - os::large_page_size() : os::vm_page_size(); - + const size_t pageSize = UseLargePages ? os::large_page_size() : os::vm_page_size(); assert(alignment % pageSize == 0, "Must be"); - for (int i = 0; i < _n_gens; i++) { - total_reserved += _gen_specs[i]->max_size(); - if (total_reserved < _gen_specs[i]->max_size()) { - vm_exit_during_initialization(overflow_msg); - } - n_covered_regions += _gen_specs[i]->n_covered_regions(); + size_t total_reserved = gen_policy()->young_gen_spec()->max_size() + + gen_policy()->old_gen_spec()->max_size(); + if (total_reserved < gen_policy()->young_gen_spec()->max_size() || + total_reserved < gen_policy()->old_gen_spec()->max_size()) { + vm_exit_during_initialization(overflow_msg); } assert(total_reserved % alignment == 0, err_msg("Gen size; total_reserved=" SIZE_FORMAT ", alignment=" SIZE_FORMAT, total_reserved, alignment)); + int n_covered_regions = gen_policy()->young_gen_spec()->n_covered_regions() + + gen_policy()->old_gen_spec()->n_covered_regions(); + // Needed until the cardtable is fixed to have the right number // of covered regions. n_covered_regions += 2;