--- old/src/hotspot/share/gc/z/zBarrierSet.cpp 2020-05-29 12:04:25.000000000 +0200 +++ new/src/hotspot/share/gc/z/zBarrierSet.cpp 2020-05-29 12:04:25.000000000 +0200 @@ -95,3 +95,7 @@ // Flush and free any remaining mark stacks ZHeap::heap()->mark_flush_and_free(thread); } + +void ZBarrierSet::print_on(outputStream* st) const { + st->print_cr("ZBarrierSet"); +} --- old/src/hotspot/share/gc/z/zBarrierSet.hpp 2020-05-29 12:04:26.000000000 +0200 +++ new/src/hotspot/share/gc/z/zBarrierSet.hpp 2020-05-29 12:04:26.000000000 +0200 @@ -40,7 +40,7 @@ virtual void on_thread_attach(Thread* thread); virtual void on_thread_detach(Thread* thread); - virtual void print_on(outputStream* st) const {} + virtual void print_on(outputStream* st) const; template class AccessBarrier : public BarrierSet::AccessBarrier { --- old/src/hotspot/share/gc/z/zCollectedHeap.cpp 2020-05-29 12:04:26.000000000 +0200 +++ new/src/hotspot/share/gc/z/zCollectedHeap.cpp 2020-05-29 12:04:26.000000000 +0200 @@ -304,21 +304,34 @@ _heap.print_on(st); } +static const char* z_global_phase_string() { + switch (ZGlobalPhase) { + case ZPhaseMark: return "Mark"; + case ZPhaseMarkCompleted: return "MarkCompleted"; + case ZPhaseRelocate: return "Relocate"; + default: assert(false, "Unknown ZGlobalPhase"); return "Unknown"; + } +} + void ZCollectedHeap::print_on_error(outputStream* st) const { + st->print_cr( "ZGC Globals:"); + st->print_cr( " GlobalPhase: %u (%s)", ZGlobalPhase, z_global_phase_string()); + st->print_cr( " GlobalSeqNum: %u", ZGlobalSeqNum); + st->print_cr( " Offset Max: " SIZE_FORMAT "%s (" PTR_FORMAT ")", + byte_size_in_exact_unit(ZAddressOffsetMax), + exact_unit_for_byte_size(ZAddressOffsetMax), + ZAddressOffsetMax); + st->print_cr( " Page Size Small: " SIZE_FORMAT "M", ZPageSizeSmall / M); + st->print_cr( " Page Size Medium: " SIZE_FORMAT "M", ZPageSizeMedium / M); + st->cr(); + st->print_cr( "ZGC Metadata Bits:"); + st->print_cr( " Good: " PTR_FORMAT, ZAddressGoodMask); + st->print_cr( " Bad: " PTR_FORMAT, ZAddressBadMask); + st->print_cr( " WeakBad: " PTR_FORMAT, ZAddressWeakBadMask); + st->print_cr( " Marked: " PTR_FORMAT, ZAddressMetadataMarked); + st->print_cr( " Remapped: " PTR_FORMAT, ZAddressMetadataRemapped); + st->cr(); CollectedHeap::print_on_error(st); - - st->print_cr( "Heap"); - st->print_cr( " GlobalPhase: %u", ZGlobalPhase); - st->print_cr( " GlobalSeqNum: %u", ZGlobalSeqNum); - st->print_cr( " Offset Max: " SIZE_FORMAT_W(-15) " (" PTR_FORMAT ")", ZAddressOffsetMax, ZAddressOffsetMax); - st->print_cr( " Page Size Small: " SIZE_FORMAT_W(-15) " (" PTR_FORMAT ")", ZPageSizeSmall, ZPageSizeSmall); - st->print_cr( " Page Size Medium: " SIZE_FORMAT_W(-15) " (" PTR_FORMAT ")", ZPageSizeMedium, ZPageSizeMedium); - st->print_cr( "Metadata Bits"); - st->print_cr( " Good: " PTR_FORMAT, ZAddressGoodMask); - st->print_cr( " Bad: " PTR_FORMAT, ZAddressBadMask); - st->print_cr( " WeakBad: " PTR_FORMAT, ZAddressWeakBadMask); - st->print_cr( " Marked: " PTR_FORMAT, ZAddressMetadataMarked); - st->print_cr( " Remapped: " PTR_FORMAT, ZAddressMetadataRemapped); } void ZCollectedHeap::print_extended_on(outputStream* st) const { --- old/src/hotspot/share/gc/z/zHeap.cpp 2020-05-29 12:04:27.000000000 +0200 +++ new/src/hotspot/share/gc/z/zHeap.cpp 2020-05-29 12:04:27.000000000 +0200 @@ -505,6 +505,7 @@ _page_allocator.enable_deferred_delete(); // Print all pages + st->print_cr("ZGC Page Table:"); ZPageTableIterator iter(&_page_table); for (ZPage* page; iter.next(&page);) { page->print_on(st); @@ -512,8 +513,6 @@ // Allow pages to be deleted _page_allocator.enable_deferred_delete(); - - st->cr(); } bool ZHeap::print_location(outputStream* st, uintptr_t addr) const {