< prev index next >
src/hotspot/share/gc/g1/g1HeapTransition.cpp
Print this page
rev 56834 : imported patch 8220312.stat.2
rev 56835 : imported patch 8220312.stat.3
*** 24,42 ****
#include "precompiled.hpp"
#include "gc/g1/g1CollectedHeap.hpp"
#include "gc/g1/g1HeapTransition.hpp"
#include "gc/g1/g1Policy.hpp"
! #include "logging/log.hpp"
#include "memory/metaspace.hpp"
! G1HeapTransition::Data::Data(G1CollectedHeap* g1_heap) {
! _eden_length = g1_heap->eden_regions_count();
! _survivor_length = g1_heap->survivor_regions_count();
! _old_length = g1_heap->old_regions_count();
! _archive_length = g1_heap->archive_regions_count();
! _humongous_length = g1_heap->humongous_regions_count();
}
G1HeapTransition::G1HeapTransition(G1CollectedHeap* g1_heap) : _g1_heap(g1_heap), _before(g1_heap) { }
struct DetailedUsage : public StackObj {
--- 24,65 ----
#include "precompiled.hpp"
#include "gc/g1/g1CollectedHeap.hpp"
#include "gc/g1/g1HeapTransition.hpp"
#include "gc/g1/g1Policy.hpp"
! #include "logging/logStream.hpp"
#include "memory/metaspace.hpp"
! G1HeapTransition::Data::Data(G1CollectedHeap* g1_heap) :
! _eden_length(g1_heap->eden_regions_count()),
! _survivor_length(g1_heap->survivor_regions_count()),
! _old_length(g1_heap->old_regions_count()),
! _archive_length(g1_heap->archive_regions_count()),
! _humongous_length(g1_heap->humongous_regions_count()),
! _eden_length_per_node(NULL),
! _survivor_length_per_node(NULL) {
!
! uint node_count = G1NUMA::numa()->num_active_nodes();
!
! if (node_count > 1) {
! LogTarget(Debug, gc, heap, numa) lt;
!
! if (lt.is_enabled()) {
! _eden_length_per_node = NEW_C_HEAP_ARRAY(uint, node_count, mtGC);
! _survivor_length_per_node = NEW_C_HEAP_ARRAY(uint, node_count, mtGC);
!
! for (uint i = 0; i < node_count; i++) {
! _eden_length_per_node[i] = g1_heap->eden_regions_count(i);
! _survivor_length_per_node[i] = g1_heap->survivor_regions_count(i);
! }
! }
! }
! }
!
! G1HeapTransition::Data::~Data() {
! FREE_C_HEAP_ARRAY(uint, _eden_length_per_node);
! FREE_C_HEAP_ARRAY(uint, _survivor_length_per_node);
}
G1HeapTransition::G1HeapTransition(G1CollectedHeap* g1_heap) : _g1_heap(g1_heap), _before(g1_heap) { }
struct DetailedUsage : public StackObj {
*** 82,91 ****
--- 105,142 ----
}
return false;
}
};
+ static void log_regions(const char* msg, size_t before_length, size_t after_length, size_t capacity,
+ uint* before_per_node_length, uint* after_per_node_length) {
+ LogTarget(Info, gc, heap) lt;
+
+ if (lt.is_enabled()) {
+ LogStream ls(lt);
+
+ ls.print("%s regions: " SIZE_FORMAT "->" SIZE_FORMAT "(" SIZE_FORMAT ")",
+ msg, before_length, after_length, capacity);
+ // Not NULL only if gc+heap+numa at Debug level is enabled.
+ if (before_per_node_length != NULL && after_per_node_length != NULL) {
+ G1NUMA* numa = G1NUMA::numa();
+ uint num_nodes = numa->num_active_nodes();
+ const int* node_ids = numa->node_ids();
+ ls.print(" (");
+ for (uint i = 0; i < num_nodes; i++) {
+ ls.print("%d: %u->%u", node_ids[i], before_per_node_length[i], after_per_node_length[i]);
+ // Skip adding below if it is the last one.
+ if (i != num_nodes - 1) {
+ ls.print(", ");
+ }
+ }
+ ls.print(")");
+ }
+ ls.print_cr("");
+ }
+ }
+
void G1HeapTransition::print() {
Data after(_g1_heap);
size_t eden_capacity_length_after_gc = _g1_heap->policy()->young_list_target_length() - after._survivor_length;
size_t survivor_capacity_length_before_gc = _g1_heap->policy()->max_survivor_regions();
*** 104,119 ****
after._archive_length, usage._archive_region_count);
assert(usage._humongous_region_count == after._humongous_length, "Expected humongous to be " SIZE_FORMAT " but was " SIZE_FORMAT,
after._humongous_length, usage._humongous_region_count);
}
! log_info(gc, heap)("Eden regions: " SIZE_FORMAT "->" SIZE_FORMAT "(" SIZE_FORMAT ")",
! _before._eden_length, after._eden_length, eden_capacity_length_after_gc);
log_trace(gc, heap)(" Used: 0K, Waste: 0K");
! log_info(gc, heap)("Survivor regions: " SIZE_FORMAT "->" SIZE_FORMAT "(" SIZE_FORMAT ")",
! _before._survivor_length, after._survivor_length, survivor_capacity_length_before_gc);
log_trace(gc, heap)(" Used: " SIZE_FORMAT "K, Waste: " SIZE_FORMAT "K",
usage._survivor_used / K, ((after._survivor_length * HeapRegion::GrainBytes) - usage._survivor_used) / K);
log_info(gc, heap)("Old regions: " SIZE_FORMAT "->" SIZE_FORMAT,
_before._old_length, after._old_length);
--- 155,170 ----
after._archive_length, usage._archive_region_count);
assert(usage._humongous_region_count == after._humongous_length, "Expected humongous to be " SIZE_FORMAT " but was " SIZE_FORMAT,
after._humongous_length, usage._humongous_region_count);
}
! log_regions("Eden", _before._eden_length, after._eden_length, eden_capacity_length_after_gc,
! _before._eden_length_per_node, after._eden_length_per_node);
log_trace(gc, heap)(" Used: 0K, Waste: 0K");
! log_regions("Survivor", _before._survivor_length, after._survivor_length, survivor_capacity_length_before_gc,
! _before._survivor_length_per_node, after._survivor_length_per_node);
log_trace(gc, heap)(" Used: " SIZE_FORMAT "K, Waste: " SIZE_FORMAT "K",
usage._survivor_used / K, ((after._survivor_length * HeapRegion::GrainBytes) - usage._survivor_used) / K);
log_info(gc, heap)("Old regions: " SIZE_FORMAT "->" SIZE_FORMAT,
_before._old_length, after._old_length);
< prev index next >