< prev index next >
src/hotspot/share/gc/shared/genCollectedHeap.cpp
Print this page
rev 55927 : 8227224: GenCollectedHeap: add subspace transitions for young gen for gc+heap=info log lines
Reviewed-by:
@@ -204,10 +204,23 @@
void GenCollectedHeap::ref_processing_init() {
_young_gen->ref_processor_init();
_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;
}
GenerationSpec* GenCollectedHeap::old_gen_spec() const {
@@ -579,13 +592,11 @@
bool complete = full && (max_generation == OldGen);
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;
bool do_full_collection = false;
@@ -623,12 +634,11 @@
do_full_collection = should_do_full_collection(size, full, is_tlab, max_generation);
if (!do_full_collection) {
// 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();
gc_epilogue(complete);
@@ -682,12 +692,11 @@
MetaspaceUtils::verify_metrics();
// Resize the metaspace capacity after full collections
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();
// Need to tell the epilogue code we are done with Full GC, regardless what was
@@ -1266,15 +1275,38 @@
_young_gen->print_summary_info_on(&lsh);
_old_gen->print_summary_info_on(&lsh);
}
}
-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 {
private:
bool _full;
< prev index next >