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

src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp

Print this page

        

*** 50,129 **** PSAdaptiveSizePolicy* ParallelScavengeHeap::_size_policy = NULL; PSGCAdaptivePolicyCounters* ParallelScavengeHeap::_gc_policy_counters = NULL; ParallelScavengeHeap* ParallelScavengeHeap::_psh = NULL; GCTaskManager* ParallelScavengeHeap::_gc_task_manager = NULL; - static void trace_gen_sizes(const char* const str, - size_t og_min, size_t og_max, - size_t yg_min, size_t yg_max) - { - if (TracePageSizes) { - tty->print_cr("%s: " SIZE_FORMAT "," SIZE_FORMAT " " - SIZE_FORMAT "," SIZE_FORMAT " " - SIZE_FORMAT, - str, - og_min / K, og_max / K, - yg_min / K, yg_max / K, - (og_max + yg_max) / K); - } - } - jint ParallelScavengeHeap::initialize() { CollectedHeap::pre_initialize(); ! // Cannot be initialized until after the flags are parsed ! // GenerationSizer flag_parser; _collector_policy = new GenerationSizer(); ! size_t yg_min_size = _collector_policy->min_young_gen_size(); ! size_t yg_max_size = _collector_policy->max_young_gen_size(); ! size_t og_min_size = _collector_policy->min_old_gen_size(); ! size_t og_max_size = _collector_policy->max_old_gen_size(); ! ! trace_gen_sizes("ps heap raw", ! og_min_size, og_max_size, ! yg_min_size, yg_max_size); ! ! const size_t og_page_sz = os::page_size_for_region(yg_min_size + og_min_size, ! yg_max_size + og_max_size, ! 8); ! ! const size_t og_align = set_alignment(_old_gen_alignment, og_page_sz); ! const size_t yg_align = set_alignment(_young_gen_alignment, og_page_sz); ! ! // Update sizes to reflect the selected page size(s). ! // ! // NEEDS_CLEANUP. The default TwoGenerationCollectorPolicy uses NewRatio; it ! // should check UseAdaptiveSizePolicy. Changes from generationSizer could ! // move to the common code. ! yg_min_size = align_size_up(yg_min_size, yg_align); ! yg_max_size = align_size_up(yg_max_size, yg_align); ! size_t yg_cur_size = ! align_size_up(_collector_policy->young_gen_size(), yg_align); ! yg_cur_size = MAX2(yg_cur_size, yg_min_size); ! ! og_min_size = align_size_up(og_min_size, og_align); ! // Align old gen size down to preserve specified heap size. ! assert(og_align == yg_align, "sanity"); ! og_max_size = align_size_down(og_max_size, og_align); ! og_max_size = MAX2(og_max_size, og_min_size); ! size_t og_cur_size = ! align_size_down(_collector_policy->old_gen_size(), og_align); ! og_cur_size = MAX2(og_cur_size, og_min_size); ! ! trace_gen_sizes("ps heap rnd", ! og_min_size, og_max_size, ! yg_min_size, yg_max_size); ! ! const size_t heap_size = og_max_size + yg_max_size; ! ! ReservedSpace heap_rs = Universe::reserve_heap(heap_size, og_align); MemTracker::record_virtual_memory_type((address)heap_rs.base(), mtJavaHeap); ! os::trace_page_sizes("ps main", og_min_size + yg_min_size, ! og_max_size + yg_max_size, og_page_sz, heap_rs.base(), heap_rs.size()); if (!heap_rs.is_reserved()) { vm_shutdown_during_initialization( "Could not reserve enough space for object heap"); --- 50,73 ---- PSAdaptiveSizePolicy* ParallelScavengeHeap::_size_policy = NULL; PSGCAdaptivePolicyCounters* ParallelScavengeHeap::_gc_policy_counters = NULL; ParallelScavengeHeap* ParallelScavengeHeap::_psh = NULL; GCTaskManager* ParallelScavengeHeap::_gc_task_manager = NULL; jint ParallelScavengeHeap::initialize() { CollectedHeap::pre_initialize(); ! // Initialize collector policy _collector_policy = new GenerationSizer(); + _collector_policy->initialize_all(); ! const size_t heap_size = _collector_policy->max_heap_byte_size(); + ReservedSpace heap_rs = Universe::reserve_heap(heap_size, _collector_policy->heap_alignment()); MemTracker::record_virtual_memory_type((address)heap_rs.base(), mtJavaHeap); ! os::trace_page_sizes("ps main", _collector_policy->min_heap_byte_size(), ! heap_size, generation_alignment(), heap_rs.base(), heap_rs.size()); if (!heap_rs.is_reserved()) { vm_shutdown_during_initialization( "Could not reserve enough space for object heap");
*** 140,172 **** vm_shutdown_during_initialization( "Could not reserve enough space for barrier set"); return JNI_ENOMEM; } - // Initial young gen size is 4 Mb - // - // XXX - what about flag_parser.young_gen_size()? - const size_t init_young_size = align_size_up(4 * M, yg_align); - yg_cur_size = MAX2(MIN2(init_young_size, yg_max_size), yg_cur_size); - // Make up the generations // Calculate the maximum size that a generation can grow. This // includes growth into the other generation. Note that the // parameter _max_gen_size is kept as the maximum // size of the generation as the boundaries currently stand. // _max_gen_size is still used as that value. double max_gc_pause_sec = ((double) MaxGCPauseMillis)/1000.0; double max_gc_minor_pause_sec = ((double) MaxGCMinorPauseMillis)/1000.0; ! _gens = new AdjoiningGenerations(heap_rs, ! og_cur_size, ! og_min_size, ! og_max_size, ! yg_cur_size, ! yg_min_size, ! yg_max_size, ! yg_align); _old_gen = _gens->old_gen(); _young_gen = _gens->young_gen(); const size_t eden_capacity = _young_gen->eden_space()->capacity_in_bytes(); --- 84,103 ---- vm_shutdown_during_initialization( "Could not reserve enough space for barrier set"); return JNI_ENOMEM; } // Make up the generations // Calculate the maximum size that a generation can grow. This // includes growth into the other generation. Note that the // parameter _max_gen_size is kept as the maximum // size of the generation as the boundaries currently stand. // _max_gen_size is still used as that value. double max_gc_pause_sec = ((double) MaxGCPauseMillis)/1000.0; double max_gc_minor_pause_sec = ((double) MaxGCMinorPauseMillis)/1000.0; ! _gens = new AdjoiningGenerations(heap_rs, _collector_policy, generation_alignment()); _old_gen = _gens->old_gen(); _young_gen = _gens->young_gen(); const size_t eden_capacity = _young_gen->eden_space()->capacity_in_bytes();
*** 174,184 **** const size_t initial_promo_size = MIN2(eden_capacity, old_capacity); _size_policy = new PSAdaptiveSizePolicy(eden_capacity, initial_promo_size, young_gen()->to_space()->capacity_in_bytes(), ! intra_heap_alignment(), max_gc_pause_sec, max_gc_minor_pause_sec, GCTimeRatio ); --- 105,115 ---- const size_t initial_promo_size = MIN2(eden_capacity, old_capacity); _size_policy = new PSAdaptiveSizePolicy(eden_capacity, initial_promo_size, young_gen()->to_space()->capacity_in_bytes(), ! _collector_policy->gen_alignment(), max_gc_pause_sec, max_gc_minor_pause_sec, GCTimeRatio );
src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File