On Fri, 6 Nov 2020 02:33:37 GMT, David Holmes <dhol...@openjdk.org> wrote:

>> Changes from @fisk and @dcubed-ojdk to:
>> 
>> - simplify ObjectMonitor list management
>> - get rid of Type-Stable Memory (TSM)
>> 
>> This change has been tested with Mach5 Tier[1-3],4,5,6,7,8; no new 
>> regressions.
>> Aurora Perf runs have also been done (DaCapo-h2, Quick Startup/Footprint,
>> SPECjbb2015-Tuned-G1, SPECjbb2015-Tuned-ParGC, Volano)
>>   - a few minor regressions (<= -0.24%)
>>   - Volano is 6.8% better
>> 
>> Eric C. has also done promotion perf runs on these bits and says "the 
>> results look fine".
>
> src/hotspot/share/runtime/synchronizer.hpp line 173:
> 
>> 171: 
>> 172:   static MonitorList   _in_use_list;
>> 173:   static jint          _in_use_list_ceiling;
> 
> Can you add some commentary on what this ceiling is as I could not understand 
> its role just by looking at the code. Thanks.

How about this:
  static MonitorList   _in_use_list;
  // The ratio of the current _in_use_list count to the ceiling is used
  // to determine if we are above MonitorUsedDeflationThreshold and need
  // to do an async monitor deflation cycle. The ceiling is increased by
  // AvgMonitorsPerThreadEstimate when a thread is added to the system
  // and is decreased by AvgMonitorsPerThreadEstimate when a thread is
  // removed from the system.
  // Note: If the _in_use_list max exceeds the ceiling, then
  // monitors_used_above_threshold() will use the in_use_list max instead
  // of the thread count derived ceiling because we have used more
  // ObjectMonitors than the estimated average.
  static jint          _in_use_list_ceiling;

> src/hotspot/share/runtime/synchronizer.cpp line 221:
> 
>> 219: 
>> 220: MonitorList ObjectSynchronizer::_in_use_list;
>> 221: // Start the ceiling with one thread:
> 
> This relates to me not understanding what this ceiling is (as commented 
> elsewhere) but why does this say "start with one thread" when the value of 
> AvgMonitorsPerThreadEstimate defaults to 1024 ??

The estimate is that a single thread will generate at most 1024 inflated
ObjectMonitors on average.

I changed the comment like this:
// Start the ceiling with the estimate for one thread:
jint ObjectSynchronizer::_in_use_list_ceiling = AvgMonitorsPerThreadEstimate;
Does that help?

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

PR: https://git.openjdk.java.net/jdk/pull/642

Reply via email to