--- old/src/share/vm/gc/g1/g1EvacStats.cpp 2017-02-17 11:08:10.808875087 -0500 +++ new/src/share/vm/gc/g1/g1EvacStats.cpp 2017-02-17 11:08:09.608805810 -0500 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,18 +46,7 @@ _failure_waste * HeapWordSize); } -void G1EvacStats::adjust_desired_plab_sz() { - log_plab_allocation(); - - if (!ResizePLAB) { - // Clear accumulators for next round. - reset(); - return; - } - - assert(is_object_aligned(max_size()) && min_size() <= max_size(), - "PLAB clipping computation may be incorrect"); - +size_t G1EvacStats::adjust_desired_plab_sz_helper() { if (_allocated == 0) { assert((_unused == 0), "Inconsistency in PLAB stats: " @@ -109,13 +98,7 @@ size_t const total_waste_allowed = used_for_waste_calculation * TargetPLABWastePct; size_t const cur_plab_sz = (size_t)((double)total_waste_allowed / G1LastPLABAverageOccupancy); - // Take historical weighted average - _filter.sample(cur_plab_sz); - _desired_net_plab_sz = MAX2(min_size(), (size_t)_filter.average()); - - log_sizing(cur_plab_sz, _desired_net_plab_sz); - // Clear accumulators for next round. - reset(); + return cur_plab_sz; } G1EvacStats::G1EvacStats(const char* description, size_t desired_plab_sz_, unsigned wt) : --- old/src/share/vm/gc/g1/g1EvacStats.hpp 2017-02-17 11:08:14.457085688 -0500 +++ new/src/share/vm/gc/g1/g1EvacStats.hpp 2017-02-17 11:08:13.261016643 -0500 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -58,7 +58,7 @@ ~G1EvacStats(); - virtual void adjust_desired_plab_sz(); + virtual size_t adjust_desired_plab_sz_helper(); uint regions_filled() const { return _regions_filled; } size_t region_end_waste() const { return _region_end_waste; } --- old/src/share/vm/gc/shared/plab.cpp 2017-02-17 11:08:18.093295597 -0500 +++ new/src/share/vm/gc/shared/plab.cpp 2017-02-17 11:08:16.897226551 -0500 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -154,6 +154,17 @@ assert(is_object_aligned(max_size()) && min_size() <= max_size(), "PLAB clipping computation may be incorrect"); + size_t plab_sz = adjust_desired_plab_sz_helper(); + // Take historical weighted average + _filter.sample(plab_sz); + _desired_net_plab_sz = MAX2(min_size(), (size_t)_filter.average()); + + log_sizing(plab_sz, _desired_net_plab_sz); + // Clear accumulators for next round + reset(); +} + +size_t PLABStats::adjust_desired_plab_sz_helper() { if (_allocated == 0) { assert(_unused == 0, "Inconsistency in PLAB stats: " @@ -173,11 +184,5 @@ size_t used = _allocated - _wasted - _unused; // Assumed to have 1 gc worker thread size_t recent_plab_sz = used / target_refills; - // Take historical weighted average - _filter.sample(recent_plab_sz); - _desired_net_plab_sz = MAX2(min_size(), (size_t)_filter.average()); - - log_sizing(recent_plab_sz, _desired_net_plab_sz); - - reset(); + return recent_plab_sz; } --- old/src/share/vm/gc/shared/plab.hpp 2017-02-17 11:08:21.793509200 -0500 +++ new/src/share/vm/gc/shared/plab.hpp 2017-02-17 11:08:20.597440154 -0500 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -197,7 +197,9 @@ // Updates the current desired PLAB size. Computes the new desired PLAB size with one gc worker thread, // updates _desired_plab_sz and clears sensor accumulators. - virtual void adjust_desired_plab_sz(); + void adjust_desired_plab_sz(); + // helper for adjust_desired_plab_sz(). + virtual size_t adjust_desired_plab_sz_helper(); inline void add_allocated(size_t v);