--- old/src/share/vm/memory/generation.cpp 2014-10-17 16:10:05.000000000 +0200 +++ new/src/share/vm/memory/generation.cpp 2014-10-17 16:10:05.000000000 +0200 @@ -45,8 +45,7 @@ PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC -Generation::Generation(ReservedSpace rs, size_t initial_size, int level) : - _level(level), +Generation::Generation(ReservedSpace rs, size_t initial_size) : _ref_processor(NULL) { if (!_virtual_space.initialize(rs, initial_size)) { vm_exit_during_initialization("Could not reserve enough space for " @@ -63,9 +62,11 @@ } GenerationSpec* Generation::spec() { - GenCollectorPolicy* gcp = GenCollectedHeap::heap()->gen_policy(); - assert(0 <= level() && level() < gcp->number_of_generations(), "Bad gen level"); - return level() == 0 ? gcp->young_gen_spec() : gcp->old_gen_spec(); + GenCollectedHeap* gch = GenCollectedHeap::heap(); + if (this == gch->young_gen()) { + return gch->gen_policy()->young_gen_spec(); + } + return gch->gen_policy()->old_gen_spec(); } size_t Generation::max_capacity() const { @@ -114,9 +115,17 @@ void Generation::print_summary_info_on(outputStream* st) { StatRecord* sr = stat_record(); double time = sr->accumulated_time.seconds(); + // I didn't want to change the logging when removing the level concept, + // but I guess this logging could say young/old or something instead of 0/1. + int level; + if (this == GenCollectedHeap::heap()->young_gen()) { + level = 0; + } else { + level = 1; + } st->print_cr("[Accumulated GC generation %d time %3.7f secs, " "%d GC's, avg GC time %3.7f]", - level(), time, sr->invocations, + level, time, sr->invocations, sr->invocations > 0 ? time / sr->invocations : 0.0); } @@ -159,25 +168,14 @@ return (DefNewGeneration*) this; } -Generation* Generation::next_gen() const { - GenCollectedHeap* gch = GenCollectedHeap::heap(); - if (level() == 0) { - return gch->old_gen(); - } else { - return NULL; - } -} - size_t Generation::max_contiguous_available() const { // The largest number of contiguous free words in this or any higher generation. - size_t max = 0; - for (const Generation* gen = this; gen != NULL; gen = gen->next_gen()) { - size_t avail = gen->contiguous_available(); - if (avail > max) { - max = avail; - } + size_t avail = contiguous_available(); + size_t old_avail = 0; + if (this == GenCollectedHeap::heap()->young_gen()) { + old_avail = GenCollectedHeap::heap()->old_gen()->contiguous_available(); } - return max; + return MAX2(avail, old_avail); } bool Generation::promotion_attempt_is_safe(size_t max_promotion_in_bytes) const { @@ -376,9 +374,8 @@ } CardGeneration::CardGeneration(ReservedSpace rs, size_t initial_byte_size, - int level, GenRemSet* remset) : - Generation(rs, initial_byte_size, level), _rs(remset), + Generation(rs, initial_byte_size), _rs(remset), _shrink_factor(0), _min_heap_delta_bytes(), _capacity_at_prologue(), _used_at_prologue() { @@ -634,7 +631,7 @@ SerialOldTracer* gc_tracer = GenMarkSweep::gc_tracer(); gc_tracer->report_gc_start(gch->gc_cause(), gc_timer->gc_start()); - GenMarkSweep::invoke_at_safepoint(_level, ref_processor(), clear_all_soft_refs); + GenMarkSweep::invoke_at_safepoint(ref_processor(), clear_all_soft_refs); gc_timer->register_gc_end();