--- old/src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp 2015-05-28 00:57:38.000000000 +0200 +++ new/src/share/vm/gc/cms/concurrentMarkSweepGeneration.cpp 2015-05-28 00:57:38.000000000 +0200 @@ -190,10 +190,10 @@ }; ConcurrentMarkSweepGeneration::ConcurrentMarkSweepGeneration( - ReservedSpace rs, size_t initial_byte_size, int level, + ReservedSpace rs, size_t initial_byte_size, CardTableRS* ct, bool use_adaptive_freelists, FreeBlockDictionary::DictionaryChoice dictionaryChoice) : - CardGeneration(rs, initial_byte_size, level, ct), + CardGeneration(rs, initial_byte_size, ct), _dilatation_factor(((double)MinChunkSize)/((double)(CollectedHeap::min_fill_size()))), _did_compact(false) { @@ -682,12 +682,17 @@ void ConcurrentMarkSweepGeneration::printOccupancy(const char *s) { GenCollectedHeap* gch = GenCollectedHeap::heap(); if (PrintGCDetails) { + // I didn't want to change the logging when removing the level concept, + // but I guess this logging could say "old" or something instead of "1". + assert(this == gch->old_gen(), + "The CMS generation should be the old generation"); + uint level = 1; if (Verbose) { - gclog_or_tty->print("[%d %s-%s: "SIZE_FORMAT"("SIZE_FORMAT")]", - level(), short_name(), s, used(), capacity()); + gclog_or_tty->print("[%u %s-%s: "SIZE_FORMAT"("SIZE_FORMAT")]", + level, short_name(), s, used(), capacity()); } else { - gclog_or_tty->print("[%d %s-%s: "SIZE_FORMAT"K("SIZE_FORMAT"K)]", - level(), short_name(), s, used() / K, capacity() / K); + gclog_or_tty->print("[%u %s-%s: "SIZE_FORMAT"K("SIZE_FORMAT"K)]", + level, short_name(), s, used() / K, capacity() / K); } } if (Verbose) { @@ -796,28 +801,17 @@ size_t desired_capacity = (size_t)(used() / ((double) 1 - desired_free_percentage)); gclog_or_tty->print_cr("\nFrom compute_new_size: "); gclog_or_tty->print_cr(" Free fraction %f", free_percentage); - gclog_or_tty->print_cr(" Desired free fraction %f", - desired_free_percentage); - gclog_or_tty->print_cr(" Maximum free fraction %f", - maximum_free_percentage); - gclog_or_tty->print_cr(" Capacity "SIZE_FORMAT, capacity()/1000); - gclog_or_tty->print_cr(" Desired capacity "SIZE_FORMAT, - desired_capacity/1000); - int prev_level = level() - 1; - if (prev_level >= 0) { - size_t prev_size = 0; - GenCollectedHeap* gch = GenCollectedHeap::heap(); - Generation* prev_gen = gch->young_gen(); - prev_size = prev_gen->capacity(); - gclog_or_tty->print_cr(" Younger gen size "SIZE_FORMAT, - prev_size/1000); - } - gclog_or_tty->print_cr(" unsafe_max_alloc_nogc "SIZE_FORMAT, - unsafe_max_alloc_nogc()/1000); - gclog_or_tty->print_cr(" contiguous available "SIZE_FORMAT, - contiguous_available()/1000); - gclog_or_tty->print_cr(" Expand by "SIZE_FORMAT" (bytes)", - expand_bytes); + gclog_or_tty->print_cr(" Desired free fraction %f", desired_free_percentage); + gclog_or_tty->print_cr(" Maximum free fraction %f", maximum_free_percentage); + gclog_or_tty->print_cr(" Capacity "SIZE_FORMAT, capacity() / 1000); + gclog_or_tty->print_cr(" Desired capacity "SIZE_FORMAT, desired_capacity / 1000); + GenCollectedHeap* gch = GenCollectedHeap::heap(); + assert(this == gch->_old_gen, "The CMS generation should always be the old generation"); + size_t young_size = gch->_young_gen->capacity(); + gclog_or_tty->print_cr(" Young gen size "SIZE_FORMAT, young_size / 1000); + gclog_or_tty->print_cr(" unsafe_max_alloc_nogc "SIZE_FORMAT, unsafe_max_alloc_nogc() / 1000); + gclog_or_tty->print_cr(" contiguous available "SIZE_FORMAT, contiguous_available() / 1000); + gclog_or_tty->print_cr(" Expand by "SIZE_FORMAT" (bytes)", expand_bytes); } // safe if expansion fails expand_for_gc_cause(expand_bytes, 0, CMSExpansionCause::_satisfy_free_ratio); @@ -1650,8 +1644,7 @@ _intra_sweep_estimate.padded_average()); } - GenMarkSweep::invoke_at_safepoint(_cmsGen->level(), - ref_processor(), clear_all_soft_refs); + GenMarkSweep::invoke_at_safepoint(ref_processor(), clear_all_soft_refs); #ifdef ASSERT CompactibleFreeListSpace* cms_space = _cmsGen->cmsSpace(); size_t free_size = cms_space->free(); @@ -2432,7 +2425,7 @@ StrongRootsScope srs(1); gch->gen_process_roots(&srs, - _cmsGen->level(), + Generation::Old, true, // younger gens are roots GenCollectedHeap::ScanningOption(roots_scanning_options()), should_unload_classes(), @@ -2504,7 +2497,7 @@ StrongRootsScope srs(1); gch->gen_process_roots(&srs, - _cmsGen->level(), + Generation::Old, true, // younger gens are roots GenCollectedHeap::ScanningOption(roots_scanning_options()), should_unload_classes(), @@ -3031,7 +3024,7 @@ StrongRootsScope srs(1); gch->gen_process_roots(&srs, - _cmsGen->level(), + Generation::Old, true, // younger gens are roots GenCollectedHeap::ScanningOption(roots_scanning_options()), should_unload_classes(), @@ -4282,15 +4275,12 @@ FlagSetting fl(gch->_is_gc_active, false); NOT_PRODUCT(GCTraceTime t("Scavenge-Before-Remark", PrintGCDetails && Verbose, true, _gc_timer_cm, _gc_tracer_cm->gc_id());) - int level = _cmsGen->level() - 1; - if (level >= 0) { - gch->do_collection(true, // full (i.e. force, see below) - false, // !clear_all_soft_refs - 0, // size - false, // is_tlab - level // max_level - ); - } + gch->do_collection(true, // full (i.e. force, see below) + false, // !clear_all_soft_refs + 0, // size + false, // is_tlab + Generation::Young // type + ); } FreelistLocker x(this); MutexLockerEx y(bitMapLock(), @@ -4464,7 +4454,7 @@ CLDToOopClosure cld_closure(&par_mri_cl, true); gch->gen_process_roots(_strong_roots_scope, - _collector->_cmsGen->level(), + Generation::Old, false, // yg was scanned above GenCollectedHeap::ScanningOption(_collector->CMSCollector::roots_scanning_options()), _collector->should_unload_classes(), @@ -4603,7 +4593,7 @@ _timer.reset(); _timer.start(); gch->gen_process_roots(_strong_roots_scope, - _collector->_cmsGen->level(), + Generation::Old, false, // yg was scanned above GenCollectedHeap::ScanningOption(_collector->CMSCollector::roots_scanning_options()), _collector->should_unload_classes(), @@ -5184,7 +5174,7 @@ StrongRootsScope srs(1); gch->gen_process_roots(&srs, - _cmsGen->level(), + Generation::Old, true, // younger gens as roots GenCollectedHeap::ScanningOption(roots_scanning_options()), should_unload_classes(), @@ -5648,11 +5638,12 @@ return _cmsSpace->find_chunk_at_end(); } -void ConcurrentMarkSweepGeneration::update_gc_stats(int current_level, +void ConcurrentMarkSweepGeneration::update_gc_stats(Generation* current_generation, bool full) { - // The next lower level has been collected. Gather any statistics + // If the young generation has been collected, gather any statistics // that are of interest at this point. - if (!full && (current_level + 1) == level()) { + bool current_is_young = (current_generation == GenCollectedHeap::heap()->young_gen()); + if (!full && current_is_young) { // Gather statistics on the young generation collection. collector()->stats().record_gc0_end(used()); }