src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Cdiff src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp

src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp

Print this page

        

*** 311,341 **** _reserve_factor = (double) reserve_perc / 100.0; // This will be set when the heap is expanded // for the first time during initialization. _reserve_regions = 0; - initialize_all(); _collectionSetChooser = new CollectionSetChooser(); - _young_gen_sizer = new G1YoungGenSizer(); // Must be after call to initialize_flags } ! void G1CollectorPolicy::initialize_flags() { ! _min_alignment = HeapRegion::GrainBytes; size_t card_table_alignment = GenRemSet::max_alignment_constraint(GenRemSet::CardTable); size_t page_size = UseLargePages ? os::large_page_size() : os::vm_page_size(); ! _max_alignment = MAX3(card_table_alignment, _min_alignment, page_size); if (SurvivorRatio < 1) { vm_exit_during_initialization("Invalid survivor ratio specified"); } CollectorPolicy::initialize_flags(); } ! G1YoungGenSizer::G1YoungGenSizer() : _sizer_kind(SizerDefaults), _adaptive_size(true) { ! assert(G1NewSizePercent <= G1MaxNewSizePercent, "Min larger than max"); ! assert(G1NewSizePercent > 0 && G1NewSizePercent < 100, "Min out of bounds"); ! assert(G1MaxNewSizePercent > 0 && G1MaxNewSizePercent < 100, "Max out of bounds"); if (FLAG_IS_CMDLINE(NewRatio)) { if (FLAG_IS_CMDLINE(NewSize) || FLAG_IS_CMDLINE(MaxNewSize)) { warning("-XX:NewSize and -XX:MaxNewSize override -XX:NewRatio"); } else { _sizer_kind = SizerNewRatio; --- 311,352 ---- _reserve_factor = (double) reserve_perc / 100.0; // This will be set when the heap is expanded // for the first time during initialization. _reserve_regions = 0; _collectionSetChooser = new CollectionSetChooser(); } ! void G1CollectorPolicy::initialize_alignments() { ! _space_alignment = HeapRegion::GrainBytes; size_t card_table_alignment = GenRemSet::max_alignment_constraint(GenRemSet::CardTable); size_t page_size = UseLargePages ? os::large_page_size() : os::vm_page_size(); ! _heap_alignment = MAX3(card_table_alignment, _space_alignment, page_size); ! } ! ! void G1CollectorPolicy::initialize_flags() { ! if (G1HeapRegionSize != HeapRegion::GrainBytes) { ! FLAG_SET_ERGO(uintx, G1HeapRegionSize, HeapRegion::GrainBytes); ! } ! if (SurvivorRatio < 1) { vm_exit_during_initialization("Invalid survivor ratio specified"); } CollectorPolicy::initialize_flags(); + _young_gen_sizer = new G1YoungGenSizer(); // Must be after call to initialize_flags } ! void G1CollectorPolicy::post_heap_initialize() { ! uintx max_regions = G1CollectedHeap::heap()->max_regions(); ! size_t max_young_size = (size_t)_young_gen_sizer->max_young_length(max_regions) * HeapRegion::GrainBytes; ! if (max_young_size != MaxNewSize) { ! FLAG_SET_ERGO(uintx, MaxNewSize, max_young_size); ! } ! } + G1YoungGenSizer::G1YoungGenSizer() : _sizer_kind(SizerDefaults), _adaptive_size(true), + _min_desired_young_length(0), _max_desired_young_length(0) { if (FLAG_IS_CMDLINE(NewRatio)) { if (FLAG_IS_CMDLINE(NewSize) || FLAG_IS_CMDLINE(MaxNewSize)) { warning("-XX:NewSize and -XX:MaxNewSize override -XX:NewRatio"); } else { _sizer_kind = SizerNewRatio;
*** 376,413 **** uint G1YoungGenSizer::calculate_default_max_length(uint new_number_of_heap_regions) { uint default_value = (new_number_of_heap_regions * G1MaxNewSizePercent) / 100; return MAX2(1U, default_value); } ! void G1YoungGenSizer::heap_size_changed(uint new_number_of_heap_regions) { ! assert(new_number_of_heap_regions > 0, "Heap must be initialized"); switch (_sizer_kind) { case SizerDefaults: ! _min_desired_young_length = calculate_default_min_length(new_number_of_heap_regions); ! _max_desired_young_length = calculate_default_max_length(new_number_of_heap_regions); break; case SizerNewSizeOnly: ! _max_desired_young_length = calculate_default_max_length(new_number_of_heap_regions); ! _max_desired_young_length = MAX2(_min_desired_young_length, _max_desired_young_length); break; case SizerMaxNewSizeOnly: ! _min_desired_young_length = calculate_default_min_length(new_number_of_heap_regions); ! _min_desired_young_length = MIN2(_min_desired_young_length, _max_desired_young_length); break; case SizerMaxAndNewSize: // Do nothing. Values set on the command line, don't update them at runtime. break; case SizerNewRatio: ! _min_desired_young_length = new_number_of_heap_regions / (NewRatio + 1); ! _max_desired_young_length = _min_desired_young_length; break; default: ShouldNotReachHere(); } ! assert(_min_desired_young_length <= _max_desired_young_length, "Invalid min/max young gen size values"); } void G1CollectorPolicy::init() { // Set aside an initial future to_space. _g1 = G1CollectedHeap::heap(); --- 387,438 ---- uint G1YoungGenSizer::calculate_default_max_length(uint new_number_of_heap_regions) { uint default_value = (new_number_of_heap_regions * G1MaxNewSizePercent) / 100; return MAX2(1U, default_value); } ! void G1YoungGenSizer::recalculate_min_max_young_length(uint number_of_heap_regions, uint* min_young_length, uint* max_young_length) { ! assert(number_of_heap_regions > 0, "Heap must be initialized"); switch (_sizer_kind) { case SizerDefaults: ! *min_young_length = calculate_default_min_length(number_of_heap_regions); ! *max_young_length = calculate_default_max_length(number_of_heap_regions); break; case SizerNewSizeOnly: ! *max_young_length = calculate_default_max_length(number_of_heap_regions); ! *max_young_length = MAX2(*min_young_length, *max_young_length); break; case SizerMaxNewSizeOnly: ! *min_young_length = calculate_default_min_length(number_of_heap_regions); ! *min_young_length = MIN2(*min_young_length, *max_young_length); break; case SizerMaxAndNewSize: // Do nothing. Values set on the command line, don't update them at runtime. break; case SizerNewRatio: ! *min_young_length = number_of_heap_regions / (NewRatio + 1); ! *max_young_length = *min_young_length; break; default: ShouldNotReachHere(); } ! assert(*min_young_length <= *max_young_length, "Invalid min/max young gen size values"); ! } ! ! uint G1YoungGenSizer::max_young_length(uint number_of_heap_regions) { ! // We need to pass the desired values because recalculation may not update these ! // values in some cases. ! uint temp = _min_desired_young_length; ! uint result = _max_desired_young_length; ! recalculate_min_max_young_length(number_of_heap_regions, &temp, &result); ! return result; ! } ! ! void G1YoungGenSizer::heap_size_changed(uint new_number_of_heap_regions) { ! recalculate_min_max_young_length(new_number_of_heap_regions, &_min_desired_young_length, ! &_max_desired_young_length); } void G1CollectorPolicy::init() { // Set aside an initial future to_space. _g1 = G1CollectedHeap::heap();
src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File