--- old/src/hotspot/share/gc/g1/g1ParScanThreadState.inline.hpp 2019-11-01 16:13:17.936400287 -0700 +++ new/src/hotspot/share/gc/g1/g1ParScanThreadState.inline.hpp 2019-11-01 16:13:17.572400276 -0700 @@ -230,4 +230,30 @@ return &_oops_into_optional_regions[hr->index_in_opt_cset()]; } +void G1ParScanThreadState::initialize_numa_stats() { + if (_numa->is_enabled()) { + LogTarget(Info, gc, heap, numa) lt; + + if (lt.is_enabled()) { + uint num_nodes = _numa->num_active_nodes(); + // Record only if there are multiple active nodes. + _obj_alloc_stat = NEW_C_HEAP_ARRAY(size_t, num_nodes, mtGC); + memset((void*)_obj_alloc_stat, 0, sizeof(size_t) * num_nodes); + } + } +} + +void G1ParScanThreadState::flush_numa_stats() { + if (_obj_alloc_stat != NULL) { + uint node_index = _numa->index_of_current_thread(); + _numa->copy_statistics(G1NUMAStats::LocalObjProcessAtCopyToSurv, node_index, _obj_alloc_stat); + } +} + +void G1ParScanThreadState::update_numa_stats(uint node_index) { + if (_obj_alloc_stat != NULL) { + _obj_alloc_stat[node_index]++; + } +} + #endif // SHARE_GC_G1_G1PARSCANTHREADSTATE_INLINE_HPP