< prev index next >
src/share/vm/gc/parallel/adjoiningGenerations.cpp
Print this page
@@ -25,10 +25,13 @@
#include "precompiled.hpp"
#include "gc/parallel/adjoiningGenerations.hpp"
#include "gc/parallel/adjoiningVirtualSpaces.hpp"
#include "gc/parallel/generationSizer.hpp"
#include "gc/parallel/parallelScavengeHeap.hpp"
+#include "logging/log.hpp"
+#include "memory/resourceArea.hpp"
+#include "utilities/ostream.hpp"
// If boundary moving is being used, create the young gen and old
// gen with ASPSYoungGen and ASPSOldGen, respectively. Revert to
// the old behavior otherwise (with PSYoungGen and PSOldGen).
@@ -114,10 +117,33 @@
size_t AdjoiningGenerations::reserved_byte_size() {
return virtual_spaces()->reserved_space().size();
}
+void log_before_expansion(bool old, size_t expand_in_bytes, size_t change_in_bytes, size_t max_size) {
+ LogHandle(heap, ergo) log;
+ if (!log.is_debug()) {
+ return;
+ }
+ log.debug("Before expansion of %s gen with boundary move", old ? "old" : "young");
+ log.debug(" Requested change: " SIZE_FORMAT_HEX " Attempted change: " SIZE_FORMAT_HEX,
+ expand_in_bytes, change_in_bytes);
+ ResourceMark rm;
+ ParallelScavengeHeap::heap()->print_on(log.debug_stream());
+ log.debug(" PS%sGen max size: " SIZE_FORMAT "K", old ? "Old" : "Young", max_size/K);
+}
+
+void log_after_expansion(bool old, size_t max_size) {
+ LogHandle(heap, ergo) log;
+ if (!log.is_debug()) {
+ return;
+ }
+ log.debug("After expansion of %s gen with boundary move", old ? "old" : "young");
+ ResourceMark rm;
+ ParallelScavengeHeap::heap()->print_on(log.debug_stream());
+ log.debug(" PS%sGen max size: " SIZE_FORMAT "K", old ? "Old" : "Young", max_size/K);
+}
// Make checks on the current sizes of the generations and
// the constraints on the sizes of the generations. Push
// up the boundary within the constraints. A partial
// push can occur.
@@ -139,21 +165,11 @@
if (change_in_bytes == 0) {
return;
}
- if (TraceAdaptiveGCBoundary) {
- gclog_or_tty->print_cr("Before expansion of old gen with boundary move");
- gclog_or_tty->print_cr(" Requested change: " SIZE_FORMAT_HEX
- " Attempted change: " SIZE_FORMAT_HEX,
- expand_in_bytes, change_in_bytes);
- if (!PrintHeapAtGC) {
- Universe::print_on(gclog_or_tty);
- }
- gclog_or_tty->print_cr(" PSOldGen max size: " SIZE_FORMAT "K",
- old_gen()->max_gen_size()/K);
- }
+ log_before_expansion(true /* old */, expand_in_bytes, change_in_bytes, old_gen()->max_gen_size());
// Move the boundary between the generations up (smaller young gen).
if (virtual_spaces()->adjust_boundary_up(change_in_bytes)) {
young_gen()->reset_after_change();
old_gen()->reset_after_change();
@@ -165,18 +181,11 @@
old_gen()->max_gen_size() + young_gen()->max_size(),
"Space is missing");
young_gen()->space_invariants();
old_gen()->space_invariants();
- if (TraceAdaptiveGCBoundary) {
- gclog_or_tty->print_cr("After expansion of old gen with boundary move");
- if (!PrintHeapAtGC) {
- Universe::print_on(gclog_or_tty);
- }
- gclog_or_tty->print_cr(" PSOldGen max size: " SIZE_FORMAT "K",
- old_gen()->max_gen_size()/K);
- }
+ log_after_expansion(true /* old */, old_gen()->max_gen_size());
}
// See comments on request_old_gen_expansion()
bool AdjoiningGenerations::request_young_gen_expansion(size_t expand_in_bytes) {
assert(UseAdaptiveSizePolicy && UseAdaptiveGCBoundary, "runtime check");
@@ -198,20 +207,11 @@
if (change_in_bytes == 0) {
return false;
}
- if (TraceAdaptiveGCBoundary) {
- gclog_or_tty->print_cr("Before expansion of young gen with boundary move");
- gclog_or_tty->print_cr(" Requested change: " SIZE_FORMAT_HEX " Attempted change: " SIZE_FORMAT_HEX,
- expand_in_bytes, change_in_bytes);
- if (!PrintHeapAtGC) {
- Universe::print_on(gclog_or_tty);
- }
- gclog_or_tty->print_cr(" PSYoungGen max size: " SIZE_FORMAT "K",
- young_gen()->max_size()/K);
- }
+ log_before_expansion(false /* old */, expand_in_bytes, change_in_bytes, young_gen()->max_size());
// Move the boundary between the generations down (smaller old gen).
MutexLocker x(ExpandHeap_lock);
if (virtual_spaces()->adjust_boundary_down(change_in_bytes)) {
young_gen()->reset_after_change();
@@ -225,18 +225,11 @@
old_gen()->max_gen_size() + young_gen()->max_size(),
"Space is missing");
young_gen()->space_invariants();
old_gen()->space_invariants();
- if (TraceAdaptiveGCBoundary) {
- gclog_or_tty->print_cr("After expansion of young gen with boundary move");
- if (!PrintHeapAtGC) {
- Universe::print_on(gclog_or_tty);
- }
- gclog_or_tty->print_cr(" PSYoungGen max size: " SIZE_FORMAT "K",
- young_gen()->max_size()/K);
- }
+ log_after_expansion(false /* old */, young_gen()->max_size());
return result;
}
// Additional space is needed in the old generation. Try to move the boundary
< prev index next >