# HG changeset patch # User tonyp # Date 1565185132 14400 # Wed Aug 07 09:38:52 2019 -0400 # Node ID ed0a44ca04636378fb5f1cab929e4a7165094ed1 # Parent 18f189e69b29f8215a3500b875127ed4fb2d977a 8227224: GenCollectedHeap: add subspace transitions for young gen for gc+heap=info log lines Reviewed-by: diff --git a/src/hotspot/share/gc/shared/genCollectedHeap.cpp b/src/hotspot/share/gc/shared/genCollectedHeap.cpp --- a/src/hotspot/share/gc/shared/genCollectedHeap.cpp +++ b/src/hotspot/share/gc/shared/genCollectedHeap.cpp @@ -206,6 +206,19 @@ _old_gen->ref_processor_init(); } +PreGenGCValues GenCollectedHeap::get_pre_gc_values() const { + const DefNewGeneration* const def_new_gen = (DefNewGeneration*) young_gen(); + + return PreGenGCValues(def_new_gen->used(), + def_new_gen->capacity(), + def_new_gen->eden()->used(), + def_new_gen->eden()->capacity(), + def_new_gen->from()->used(), + def_new_gen->from()->capacity(), + old_gen()->used(), + old_gen()->capacity()); +} + GenerationSpec* GenCollectedHeap::young_gen_spec() const { return _young_gen_spec; } @@ -581,9 +594,7 @@ bool old_collects_young = complete && !ScavengeBeforeFullGC; bool do_young_collection = !old_collects_young && _young_gen->should_collect(full, size, is_tlab); - size_t young_prev_used = _young_gen->used(); - size_t old_prev_used = _old_gen->used(); - const metaspace::MetaspaceSizesSnapshot prev_meta_sizes; + const PreGenGCValues pre_gc_values = get_pre_gc_values(); bool run_verification = total_collections() >= VerifyGCStartAt; bool prepared_for_verification = false; @@ -625,8 +636,7 @@ // Adjust generation sizes. _young_gen->compute_new_size(); - print_heap_change(young_prev_used, old_prev_used); - MetaspaceUtils::print_metaspace_change(prev_meta_sizes); + print_heap_change(pre_gc_values); // Track memory usage and detect low memory after GC finishes MemoryService::track_memory_usage(); @@ -684,8 +694,7 @@ MetaspaceGC::compute_new_size(); update_full_collections_completed(); - print_heap_change(young_prev_used, old_prev_used); - MetaspaceUtils::print_metaspace_change(prev_meta_sizes); + print_heap_change(pre_gc_values); // Track memory usage and detect low memory after GC finishes MemoryService::track_memory_usage(); @@ -1268,11 +1277,34 @@ } } -void GenCollectedHeap::print_heap_change(size_t young_prev_used, size_t old_prev_used) const { - log_info(gc, heap)("%s: " SIZE_FORMAT "K->" SIZE_FORMAT "K(" SIZE_FORMAT "K)", - _young_gen->short_name(), young_prev_used / K, _young_gen->used() /K, _young_gen->capacity() /K); - log_info(gc, heap)("%s: " SIZE_FORMAT "K->" SIZE_FORMAT "K(" SIZE_FORMAT "K)", - _old_gen->short_name(), old_prev_used / K, _old_gen->used() /K, _old_gen->capacity() /K); +void GenCollectedHeap::print_heap_change(const PreGenGCValues& pre_gc_values) const { + const DefNewGeneration* const def_new_gen = (DefNewGeneration*) young_gen(); + + log_info(gc, heap)(HEAP_CHANGE_FORMAT" " + HEAP_CHANGE_FORMAT" " + HEAP_CHANGE_FORMAT, + HEAP_CHANGE_FORMAT_ARGS(def_new_gen->short_name(), + pre_gc_values.young_gen_used(), + pre_gc_values.young_gen_capacity(), + def_new_gen->used(), + def_new_gen->capacity()), + HEAP_CHANGE_FORMAT_ARGS("Eden", + pre_gc_values.eden_used(), + pre_gc_values.eden_capacity(), + def_new_gen->eden()->used(), + def_new_gen->eden()->capacity()), + HEAP_CHANGE_FORMAT_ARGS("From", + pre_gc_values.from_used(), + pre_gc_values.from_capacity(), + def_new_gen->from()->used(), + def_new_gen->from()->capacity())); + log_info(gc, heap)(HEAP_CHANGE_FORMAT, + HEAP_CHANGE_FORMAT_ARGS(old_gen()->short_name(), + pre_gc_values.old_gen_used(), + pre_gc_values.old_gen_capacity(), + old_gen()->used(), + old_gen()->capacity())); + MetaspaceUtils::print_metaspace_change(pre_gc_values.metaspace_sizes()); } class GenGCPrologueClosure: public GenCollectedHeap::GenClosure { diff --git a/src/hotspot/share/gc/shared/genCollectedHeap.hpp b/src/hotspot/share/gc/shared/genCollectedHeap.hpp --- a/src/hotspot/share/gc/shared/genCollectedHeap.hpp +++ b/src/hotspot/share/gc/shared/genCollectedHeap.hpp @@ -28,6 +28,7 @@ #include "gc/shared/collectedHeap.hpp" #include "gc/shared/generation.hpp" #include "gc/shared/oopStorageParState.hpp" +#include "gc/shared/preGCValues.hpp" #include "gc/shared/softRefGenPolicy.hpp" class AdaptiveSizePolicy; @@ -100,6 +101,8 @@ // Initialize ("weak") refs processing support void ref_processing_init(); + PreGenGCValues get_pre_gc_values() const; + protected: // The set of potentially parallel tasks in root scanning. @@ -332,7 +335,7 @@ virtual void gc_threads_do(ThreadClosure* tc) const; virtual void print_tracing_info() const; - void print_heap_change(size_t young_prev_used, size_t old_prev_used) const; + void print_heap_change(const PreGenGCValues& pre_gc_values) const; // The functions below are helper functions that a subclass of // "CollectedHeap" can use in the implementation of its virtual