292 _reserve_factor = (double) reserve_perc / 100.0;
293 // This will be set when the heap is expanded
294 // for the first time during initialization.
295 _reserve_regions = 0;
296
297 initialize_all();
298 _collectionSetChooser = new CollectionSetChooser();
299 _young_gen_sizer = new G1YoungGenSizer(); // Must be after call to initialize_flags
300 }
301
302 void G1CollectorPolicy::initialize_flags() {
303 set_min_alignment(HeapRegion::GrainBytes);
304 set_max_alignment(GenRemSet::max_alignment_constraint(rem_set_name()));
305 if (SurvivorRatio < 1) {
306 vm_exit_during_initialization("Invalid survivor ratio specified");
307 }
308 CollectorPolicy::initialize_flags();
309 }
310
311 G1YoungGenSizer::G1YoungGenSizer() : _sizer_kind(SizerDefaults), _adaptive_size(true) {
312 assert(G1DefaultMinNewGenPercent <= G1DefaultMaxNewGenPercent, "Min larger than max");
313 assert(G1DefaultMinNewGenPercent > 0 && G1DefaultMinNewGenPercent < 100, "Min out of bounds");
314 assert(G1DefaultMaxNewGenPercent > 0 && G1DefaultMaxNewGenPercent < 100, "Max out of bounds");
315
316 if (FLAG_IS_CMDLINE(NewRatio)) {
317 if (FLAG_IS_CMDLINE(NewSize) || FLAG_IS_CMDLINE(MaxNewSize)) {
318 warning("-XX:NewSize and -XX:MaxNewSize override -XX:NewRatio");
319 } else {
320 _sizer_kind = SizerNewRatio;
321 _adaptive_size = false;
322 return;
323 }
324 }
325
326 if (FLAG_IS_CMDLINE(NewSize)) {
327 _min_desired_young_length = MAX2((uint) (NewSize / HeapRegion::GrainBytes),
328 1U);
329 if (FLAG_IS_CMDLINE(MaxNewSize)) {
330 _max_desired_young_length =
331 MAX2((uint) (MaxNewSize / HeapRegion::GrainBytes),
332 1U);
333 _sizer_kind = SizerMaxAndNewSize;
334 _adaptive_size = _min_desired_young_length == _max_desired_young_length;
335 } else {
336 _sizer_kind = SizerNewSizeOnly;
337 }
338 } else if (FLAG_IS_CMDLINE(MaxNewSize)) {
339 _max_desired_young_length =
340 MAX2((uint) (MaxNewSize / HeapRegion::GrainBytes),
341 1U);
342 _sizer_kind = SizerMaxNewSizeOnly;
343 }
344 }
345
346 uint G1YoungGenSizer::calculate_default_min_length(uint new_number_of_heap_regions) {
347 uint default_value = (new_number_of_heap_regions * G1DefaultMinNewGenPercent) / 100;
348 return MAX2(1U, default_value);
349 }
350
351 uint G1YoungGenSizer::calculate_default_max_length(uint new_number_of_heap_regions) {
352 uint default_value = (new_number_of_heap_regions * G1DefaultMaxNewGenPercent) / 100;
353 return MAX2(1U, default_value);
354 }
355
356 void G1YoungGenSizer::heap_size_changed(uint new_number_of_heap_regions) {
357 assert(new_number_of_heap_regions > 0, "Heap must be initialized");
358
359 switch (_sizer_kind) {
360 case SizerDefaults:
361 _min_desired_young_length = calculate_default_min_length(new_number_of_heap_regions);
362 _max_desired_young_length = calculate_default_max_length(new_number_of_heap_regions);
363 break;
364 case SizerNewSizeOnly:
365 _max_desired_young_length = calculate_default_max_length(new_number_of_heap_regions);
366 _max_desired_young_length = MAX2(_min_desired_young_length, _max_desired_young_length);
367 break;
368 case SizerMaxNewSizeOnly:
369 _min_desired_young_length = calculate_default_min_length(new_number_of_heap_regions);
370 _min_desired_young_length = MIN2(_min_desired_young_length, _max_desired_young_length);
371 break;
372 case SizerMaxAndNewSize:
|
292 _reserve_factor = (double) reserve_perc / 100.0;
293 // This will be set when the heap is expanded
294 // for the first time during initialization.
295 _reserve_regions = 0;
296
297 initialize_all();
298 _collectionSetChooser = new CollectionSetChooser();
299 _young_gen_sizer = new G1YoungGenSizer(); // Must be after call to initialize_flags
300 }
301
302 void G1CollectorPolicy::initialize_flags() {
303 set_min_alignment(HeapRegion::GrainBytes);
304 set_max_alignment(GenRemSet::max_alignment_constraint(rem_set_name()));
305 if (SurvivorRatio < 1) {
306 vm_exit_during_initialization("Invalid survivor ratio specified");
307 }
308 CollectorPolicy::initialize_flags();
309 }
310
311 G1YoungGenSizer::G1YoungGenSizer() : _sizer_kind(SizerDefaults), _adaptive_size(true) {
312 assert(G1NewSizePercent <= G1MaxNewSizePercent, "Min larger than max");
313 assert(G1NewSizePercent > 0 && G1NewSizePercent < 100, "Min out of bounds");
314 assert(G1MaxNewSizePercent > 0 && G1MaxNewSizePercent < 100, "Max out of bounds");
315
316 if (FLAG_IS_CMDLINE(NewRatio)) {
317 if (FLAG_IS_CMDLINE(NewSize) || FLAG_IS_CMDLINE(MaxNewSize)) {
318 warning("-XX:NewSize and -XX:MaxNewSize override -XX:NewRatio");
319 } else {
320 _sizer_kind = SizerNewRatio;
321 _adaptive_size = false;
322 return;
323 }
324 }
325
326 if (FLAG_IS_CMDLINE(NewSize)) {
327 _min_desired_young_length = MAX2((uint) (NewSize / HeapRegion::GrainBytes),
328 1U);
329 if (FLAG_IS_CMDLINE(MaxNewSize)) {
330 _max_desired_young_length =
331 MAX2((uint) (MaxNewSize / HeapRegion::GrainBytes),
332 1U);
333 _sizer_kind = SizerMaxAndNewSize;
334 _adaptive_size = _min_desired_young_length == _max_desired_young_length;
335 } else {
336 _sizer_kind = SizerNewSizeOnly;
337 }
338 } else if (FLAG_IS_CMDLINE(MaxNewSize)) {
339 _max_desired_young_length =
340 MAX2((uint) (MaxNewSize / HeapRegion::GrainBytes),
341 1U);
342 _sizer_kind = SizerMaxNewSizeOnly;
343 }
344 }
345
346 uint G1YoungGenSizer::calculate_default_min_length(uint new_number_of_heap_regions) {
347 uint default_value = (new_number_of_heap_regions * G1NewSizePercent) / 100;
348 return MAX2(1U, default_value);
349 }
350
351 uint G1YoungGenSizer::calculate_default_max_length(uint new_number_of_heap_regions) {
352 uint default_value = (new_number_of_heap_regions * G1MaxNewSizePercent) / 100;
353 return MAX2(1U, default_value);
354 }
355
356 void G1YoungGenSizer::heap_size_changed(uint new_number_of_heap_regions) {
357 assert(new_number_of_heap_regions > 0, "Heap must be initialized");
358
359 switch (_sizer_kind) {
360 case SizerDefaults:
361 _min_desired_young_length = calculate_default_min_length(new_number_of_heap_regions);
362 _max_desired_young_length = calculate_default_max_length(new_number_of_heap_regions);
363 break;
364 case SizerNewSizeOnly:
365 _max_desired_young_length = calculate_default_max_length(new_number_of_heap_regions);
366 _max_desired_young_length = MAX2(_min_desired_young_length, _max_desired_young_length);
367 break;
368 case SizerMaxNewSizeOnly:
369 _min_desired_young_length = calculate_default_min_length(new_number_of_heap_regions);
370 _min_desired_young_length = MIN2(_min_desired_young_length, _max_desired_young_length);
371 break;
372 case SizerMaxAndNewSize:
|