457 // TwoGenerationCollectorPolicy class. This is similar to what |
457 // TwoGenerationCollectorPolicy class. This is similar to what |
458 // ParallelScavenge does with its GenerationSizer class (see |
458 // ParallelScavenge does with its GenerationSizer class (see |
459 // ParallelScavengeHeap::initialize()). We might change this in the |
459 // ParallelScavengeHeap::initialize()). We might change this in the |
460 // future, but it's a good start. |
460 // future, but it's a good start. |
461 class G1YoungGenSizer : public TwoGenerationCollectorPolicy { |
461 class G1YoungGenSizer : public TwoGenerationCollectorPolicy { |
|
462 private: |
|
463 size_t size_to_region_num(size_t byte_size) { |
|
464 return MAX2((size_t) 1, byte_size / HeapRegion::GrainBytes); |
|
465 } |
462 |
466 |
463 public: |
467 public: |
464 G1YoungGenSizer() { |
468 G1YoungGenSizer() { |
465 initialize_flags(); |
469 initialize_flags(); |
466 initialize_size_info(); |
470 initialize_size_info(); |
467 } |
|
468 size_t size_to_region_num(size_t byte_size) { |
|
469 return MAX2((size_t) 1, byte_size / HeapRegion::GrainBytes); |
|
470 } |
471 } |
471 size_t min_young_region_num() { |
472 size_t min_young_region_num() { |
472 return size_to_region_num(_min_gen0_size); |
473 return size_to_region_num(_min_gen0_size); |
473 } |
474 } |
474 size_t initial_young_region_num() { |
475 size_t initial_young_region_num() { |
499 _min_desired_young_length = sizer.min_young_region_num(); |
500 _min_desired_young_length = sizer.min_young_region_num(); |
500 _max_desired_young_length = sizer.max_young_region_num(); |
501 _max_desired_young_length = sizer.max_young_region_num(); |
501 |
502 |
502 if (FLAG_IS_CMDLINE(NewRatio)) { |
503 if (FLAG_IS_CMDLINE(NewRatio)) { |
503 if (FLAG_IS_CMDLINE(NewSize) || FLAG_IS_CMDLINE(MaxNewSize)) { |
504 if (FLAG_IS_CMDLINE(NewSize) || FLAG_IS_CMDLINE(MaxNewSize)) { |
504 gclog_or_tty->print_cr("-XX:NewSize and -XX:MaxNewSize overrides -XX:NewRatio"); |
505 warning("-XX:NewSize and -XX:MaxNewSize override -XX:NewRatio"); |
505 } else { |
506 } else { |
506 // Treat NewRatio as a fixed size that is only recalculated when the heap size changes |
507 // Treat NewRatio as a fixed size that is only recalculated when the heap size changes |
507 size_t heap_regions = sizer.size_to_region_num(_g1->n_regions()); |
508 update_young_list_size_using_newratio(_g1->n_regions()); |
508 update_young_list_size_using_newratio(heap_regions); |
|
509 _using_new_ratio_calculations = true; |
509 _using_new_ratio_calculations = true; |
510 } |
510 } |
511 } |
511 } |
512 |
512 |
513 // GenCollectorPolicy guarantees that min <= initial <= max. |
513 // GenCollectorPolicy guarantees that min <= initial <= max. |