# HG changeset patch # User ehelin # Date 1394785119 -3600 # Node ID d3ef2109513414740ba349991b8dffcda00510bb # Parent ff056d90e349ad02efe8e4c60be1e5cd47128285# Parent 686d782d6121deb6bfed0e1e265f144e679e372d Merge diff -r ff056d90e349 -r d3ef21095134 src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp --- a/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp Wed Mar 05 12:31:09 2014 -0500 +++ b/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp Fri Mar 14 09:18:39 2014 +0100 @@ -280,6 +280,16 @@ if (UseAdaptiveGenerationSizePolicyAtMajorCollection && ((gc_cause != GCCause::_java_lang_system_gc) || UseAdaptiveSizePolicyWithSystemGC)) { + // Swap the survivor spaces if from_space is empty. The + // resize_young_gen() called below is normally used after + // a successful young GC and swapping of survivor spaces; + // otherwise, it will fail to resize the young gen with + // the current implementation. + if (young_gen->from_space()->is_empty()) { + young_gen->from_space()->clear(SpaceDecorator::Mangle); + young_gen->swap_spaces(); + } + // Calculate optimal free space amounts assert(young_gen->max_size() > young_gen->from_space()->capacity_in_bytes() + @@ -318,12 +328,8 @@ heap->resize_old_gen(size_policy->calculated_old_free_size_in_bytes()); - // Don't resize the young generation at an major collection. A - // desired young generation size may have been calculated but - // resizing the young generation complicates the code because the - // resizing of the old generation may have moved the boundary - // between the young generation and the old generation. Let the - // young generation resizing happen at the minor collections. + heap->resize_young_gen(size_policy->calculated_eden_size_in_bytes(), + size_policy->calculated_survivor_size_in_bytes()); } if (PrintAdaptiveSizePolicy) { gclog_or_tty->print_cr("AdaptiveSizeStop: collection: %d ", diff -r ff056d90e349 -r d3ef21095134 src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp --- a/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp Wed Mar 05 12:31:09 2014 -0500 +++ b/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp Fri Mar 14 09:18:39 2014 +0100 @@ -43,6 +43,7 @@ #include "gc_implementation/shared/gcTrace.hpp" #include "gc_implementation/shared/gcTraceTime.hpp" #include "gc_implementation/shared/isGCActiveMark.hpp" +#include "gc_implementation/shared/spaceDecorator.hpp" #include "gc_interface/gcCause.hpp" #include "memory/gcLocker.inline.hpp" #include "memory/referencePolicy.hpp" @@ -2115,6 +2116,16 @@ if (UseAdaptiveGenerationSizePolicyAtMajorCollection && ((gc_cause != GCCause::_java_lang_system_gc) || UseAdaptiveSizePolicyWithSystemGC)) { + // Swap the survivor spaces if from_space is empty. The + // resize_young_gen() called below is normally used after + // a successful young GC and swapping of survivor spaces; + // otherwise, it will fail to resize the young gen with + // the current implementation. + if (young_gen->from_space()->is_empty()) { + young_gen->from_space()->clear(SpaceDecorator::Mangle); + young_gen->swap_spaces(); + } + // Calculate optimal free space amounts assert(young_gen->max_size() > young_gen->from_space()->capacity_in_bytes() + @@ -2154,12 +2165,8 @@ heap->resize_old_gen( size_policy->calculated_old_free_size_in_bytes()); - // Don't resize the young generation at an major collection. A - // desired young generation size may have been calculated but - // resizing the young generation complicates the code because the - // resizing of the old generation may have moved the boundary - // between the young generation and the old generation. Let the - // young generation resizing happen at the minor collections. + heap->resize_young_gen(size_policy->calculated_eden_size_in_bytes(), + size_policy->calculated_survivor_size_in_bytes()); } if (PrintAdaptiveSizePolicy) { gclog_or_tty->print_cr("AdaptiveSizeStop: collection: %d ", diff -r ff056d90e349 -r d3ef21095134 src/share/vm/memory/collectorPolicy.cpp --- a/src/share/vm/memory/collectorPolicy.cpp Wed Mar 05 12:31:09 2014 -0500 +++ b/src/share/vm/memory/collectorPolicy.cpp Fri Mar 14 09:18:39 2014 +0100 @@ -304,10 +304,13 @@ } // Now take the actual NewSize into account. We will silently increase NewSize - // if the user specified a smaller value. + // if the user specified a smaller or unaligned value. smallest_new_size = MAX2(smallest_new_size, (uintx)align_size_down(NewSize, _gen_alignment)); if (smallest_new_size != NewSize) { - FLAG_SET_ERGO(uintx, NewSize, smallest_new_size); + // Do not use FLAG_SET_ERGO to update NewSize here, since this will override + // if NewSize was set on the command line or not. This information is needed + // later when setting the initial and minimum young generation size. + NewSize = smallest_new_size; } _initial_gen0_size = NewSize; diff -r ff056d90e349 -r d3ef21095134 src/share/vm/runtime/timer.cpp --- a/src/share/vm/runtime/timer.cpp Wed Mar 05 12:31:09 2014 -0500 +++ b/src/share/vm/runtime/timer.cpp Fri Mar 14 09:18:39 2014 +0100 @@ -194,7 +194,7 @@ system_secs = system_time - _starting_system_time; real_secs = real_time - _starting_real_time; - _logfile->print(" [Times: user=%3.2f sys=%3.2f, real=%3.2f secs] ", + _logfile->print(" [Times: user=%3.2f sys=%3.2f real=%3.2f secs] ", user_secs, system_secs, real_secs); } else {