< prev index next >
src/share/vm/memory/genCollectedHeap.cpp
Print this page
rev 7974 : imported patch genspecs
*** 82,112 ****
}
jint GenCollectedHeap::initialize() {
CollectedHeap::pre_initialize();
- int i;
_n_gens = gen_policy()->number_of_generations();
assert(_n_gens == 2, "There is no support for more than two generations");
// While there are no constraints in the GC code that HeapWordSize
// be any particular value, there are multiple other areas in the
// system which believe this to be true (e.g. oop->object_size in some
// cases incorrectly returns the size in wordSize units rather than
// 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;
ReservedSpace heap_rs;
--- 82,101 ----
*** 125,140 ****
_rem_set = collector_policy()->create_rem_set(reserved_region());
set_barrier_set(rem_set()->bs());
_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());
clear_incremental_collection_failed();
#if INCLUDE_ALL_GCS
// If we are running CMS, create the collector responsible
// for collecting the CMS generations.
--- 114,129 ----
_rem_set = collector_policy()->create_rem_set(reserved_region());
set_barrier_set(rem_set()->bs());
_gch = this;
! 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());
clear_incremental_collection_failed();
#if INCLUDE_ALL_GCS
// If we are running CMS, create the collector responsible
// for collecting the CMS generations.
*** 151,172 ****
ReservedSpace* heap_rs){
const char overflow_msg[] = "The size of the object heap + VM data exceeds "
"the maximum representable size";
// Now figure out the total size.
! size_t total_reserved = 0;
! 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);
}
- }
assert(total_reserved % alignment == 0,
err_msg("Gen size; total_reserved=" SIZE_FORMAT ", alignment="
SIZE_FORMAT, total_reserved, alignment));
*heap_rs = Universe::reserve_heap(total_reserved, alignment);
--- 140,160 ----
ReservedSpace* heap_rs){
const char overflow_msg[] = "The size of the object heap + VM data exceeds "
"the maximum representable size";
// Now figure out the total size.
! const size_t pageSize = UseLargePages ? os::large_page_size() : os::vm_page_size();
assert(alignment % pageSize == 0, "Must be");
! GenerationSpec* young_spec = gen_policy()->young_gen_spec();
! GenerationSpec* old_spec = gen_policy()->old_gen_spec();
!
! size_t total_reserved = young_spec->max_size() + old_spec->max_size();
! if (total_reserved < young_spec->max_size() ||
! total_reserved < old_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));
*heap_rs = Universe::reserve_heap(total_reserved, alignment);
< prev index next >