RFR: 8315884: New Object to ObjectMonitor mapping [v16]

Axel Boldt-Christmas aboldtch at openjdk.org
Wed Aug 14 08:05:00 UTC 2024


On Tue, 13 Aug 2024 21:45:57 GMT, Daniel D. Daugherty <dcubed at openjdk.org> wrote:

>> Axel Boldt-Christmas has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   Whitespace and nits
>
> src/hotspot/share/runtime/synchronizer.cpp line 1271:
> 
>> 1269:       _no_progress_cnt >= NoAsyncDeflationProgressMax) {
>> 1270:     double remainder = (100.0 - MonitorUsedDeflationThreshold) / 100.0;
>> 1271:     size_t new_ceiling = ceiling / remainder + 1;
> 
> Why was the `new_ceiling` calculation changed?
> I think the `new_ceiling` value is going to lower than the old ceiling value.

The old calculation made no sense if the goal was to after NoAsyncDeflationProgressMax deflation cycles with not deflation stop trying until we get more monitors. With the current calculation we can keep running these no progress cycles for quite a number of iterations.

The remainder is a value in the range [0,1].  So it will always grow by at least 1. (When remainder == 1: `new_ceiling = ceiling + 1;`)

I do however realise that the new calculation needs to handle remainder == 0.0 (MonitorUsedDeflationThreshold = 100). But the whole NoAsyncDeflationProgressMax makes little sense if MonitorUsedDeflationThreshold is 0, as the value for new ceiling would only stop deflation if it is large enough that the `size_t monitor_usage = (monitors_used * 100LL) / ceiling;` gets truncated to 0. (Less than 1%). 

But this is a leftover from the deflation changes so I will probably just remove this change and create a RFE for reevaluating this.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/20067#discussion_r1716479164


More information about the core-libs-dev mailing list