--- old/src/share/vm/gc/shenandoah/shenandoahConnectionMatrix.cpp 2017-03-24 18:44:29.334390285 +0100 +++ new/src/share/vm/gc/shenandoah/shenandoahConnectionMatrix.cpp 2017-03-24 18:44:29.278390436 +0100 @@ -36,7 +36,9 @@ _magic_offset( ((uintptr_t) _matrix) - ( ((uintptr_t) ShenandoahHeap::heap()->first_region_bottom()) >> _region_shift) * (_stride + 1)) { - clear_all(); + if (UseShenandoahMatrix) { + clear_all(); + } } ShenandoahConnectionMatrix::~ShenandoahConnectionMatrix() { @@ -44,18 +46,22 @@ } size_t ShenandoahConnectionMatrix::index_of(size_t from_idx, size_t to_idx) const { + assert (UseShenandoahMatrix, "call only when matrix is enabled"); return from_idx * _stride + to_idx; } bool ShenandoahConnectionMatrix::is_connected(size_t from_idx, size_t to_idx) const { + assert (UseShenandoahMatrix, "call only when matrix is enabled"); return _matrix[index_of(from_idx, to_idx)] > 0; } void ShenandoahConnectionMatrix::clear_connected(size_t from_idx, size_t to_idx) { + assert (UseShenandoahMatrix, "call only when matrix is enabled"); _matrix[index_of(from_idx, to_idx)] = 0; } void ShenandoahConnectionMatrix::clear_region(size_t idx) { + assert (UseShenandoahMatrix, "call only when matrix is enabled"); for (uint i = 0; i < _stride; i++) { clear_connected(i, idx); clear_connected(idx, i); @@ -63,17 +69,20 @@ } void ShenandoahConnectionMatrix::clear_region_outbound(size_t idx) { + assert (UseShenandoahMatrix, "call only when matrix is enabled"); for (uint i = 0; i < _stride; i++) { clear_connected(idx, i); } } void ShenandoahConnectionMatrix::clear_all() { + assert (UseShenandoahMatrix, "call only when matrix is enabled"); size_t count = sizeof(char) * _stride * _stride; Copy::fill_to_bytes(_matrix, count, 0); } void ShenandoahConnectionMatrix::print_on(outputStream* st) const { + assert (UseShenandoahMatrix, "call only when matrix is enabled"); st->print_cr("Connection Matrix:"); st->print_cr("%8s, %10s, %10s, %10s, %8s, %s", "Region", "Live", "Used", "Garbage", "Refcnt", "Referenced by");