< prev index next >

src/share/vm/gc/shenandoah/shenandoahConnectionMatrix.cpp

Print this page

        

*** 34,81 **** --- 34,90 ---- _region_shift(ShenandoahHeapRegion::region_size_shift()), _matrix(NEW_C_HEAP_ARRAY(char, max_regions * max_regions, mtGC)), _magic_offset( ((uintptr_t) _matrix) - ( ((uintptr_t) ShenandoahHeap::heap()->first_region_bottom()) >> _region_shift) * (_stride + 1)) { + if (UseShenandoahMatrix) { clear_all(); + } } ShenandoahConnectionMatrix::~ShenandoahConnectionMatrix() { FREE_C_HEAP_ARRAY(char, _matrix); } 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); } } 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"); ShenandoahHeap* heap = ShenandoahHeap::heap(); size_t num_regions = heap->num_regions();
< prev index next >