RFR: 8181859: Monitor deflation is not checked in cleanup path

Daniel D. Daugherty daniel.daugherty at oracle.com
Wed Jun 14 15:07:54 UTC 2017


On 6/14/17 7:22 AM, Robbin Ehn wrote:
> Hi,
>
> On 06/14/2017 01:01 PM, Carsten Varming wrote:
>> The last version looks good to me.
>
> Thanks, but unfortunately there is an error in my calculation.
> If the is_cleanup check is run very early gMonitorPopulation is zero 
> resulting in a division by zero.
>
> Incremental:
>
>  static bool monitors_used_above_threshold() {
> +  if (gMonitorPopulation == 0) {
> +    return false;
> +  }
>
>
> Full: http://cr.openjdk.java.net/~rehn/8181859/5/webrev/

src/share/vm/runtime/globals.hpp
     L1187   experimental(intx, MonitorUsedDeflationThreshold, 
90,                     \
     L1188           "Percentage of used monitors before trigger cleanup 
"             \
     L1189           "safepoint which deflates monitors (0 is 
off)"                    \
     L1190           "The check is performed on 
GuaranteedSafepointInterval")          \
     L1191           range(0, 
100)                                                     \

         nit - indent for L1188-91 should be after the '(' on L1187.

         typo - 'trigger' -> 'triggering'
         typo - 'off)' -> 'off).' (add period)
         typo - 'Interval")' -> 'Interval.")' (add period)

src/share/vm/runtime/synchronizer.hpp
     nit - please update copyright year to 2017.

     L148   static bool is_cleanup_needed();
         nit - please move this decl above this line:

         L138:   static void oops_do(OopClosure* f);

         so it will be between deflate_monitor() and oops_do().
         The extra blank line is not needed.

src/share/vm/runtime/synchronizer.cpp
     I like the refactoring into monitors_used_above_threshold().
     No other comments.

src/share/vm/runtime/safepoint.cpp
     L528:   // Need a safepoint if there many monitor to deflate
         typo - 'there many' -> 'there are many'
         nit - please add a period to the end of the sentence.


Thumbs up! I don't need to see another webrev if you fix the
typos and nits.

Dan


>
> Thanks for bearing with me!
>
> Note:
> monitors_used could be wrong since we don't read the values holding 
> gListLock.
> So in a very unlikely scenario it could cost a safepoint.
>
> /Robbin
>
>>
>> Carsten
>>
>> On Wed, Jun 14, 2017 at 5:40 AM, Robbin Ehn <robbin.ehn at oracle.com 
>> <mailto:robbin.ehn at oracle.com>> wrote:
>>
>>     Hi Aleksey,
>>
>>     On 06/14/2017 11:14 AM, Aleksey Shipilev wrote:
>>
>>         On 06/14/2017 11:07 AM, Robbin Ehn wrote:
>>
>>             Full:
>>             http://cr.openjdk.java.net/~rehn/8181859/2/webrev/ 
>> <http://cr.openjdk.java.net/~rehn/8181859/2/webrev/>
>>
>>
>>         Looks good to me.
>>
>>
>>     Thanks!
>>
>>
>>         I would paranoidally add parentheses in this expression, but 
>> your choice.
>>
>>         return MonitorUsedDeflationThreshold > 0 && (monitors_used * 
>> 100LL) /
>>         gMonitorPopulation > MonitorUsedDeflationThreshold;
>>
>>
>>     Discussed locally and this was suggested (looks good to me):
>>
>>     static bool monitors_used_above_threshold() {
>>        int monitors_used = gMonitorPopulation - gMonitorFreeCount;
>>        int monitor_useage = (monitors_used * 100LL) / 
>> gMonitorPopulation;
>>        return monitor_useage > MonitorUsedDeflationThreshold;
>>     }
>>
>>     bool ObjectSynchronizer::is_cleanup_needed() {
>>        if (MonitorUsedDeflationThreshold > 0) {
>>          return monitors_used_above_threshold();
>>        }
>>        return false;
>>     }
>>
>>     Carsten, Aleksey, are you good with this?
>>
>>     Full: http://cr.openjdk.java.net/~rehn/8181859/3/webrev/ 
>> <http://cr.openjdk.java.net/~rehn/8181859/3/webrev/>
>>
>>     Thanks, Robbin
>>
>>
>>
>>         Thanks,
>>         -Aleksey
>>
>>
>>



More information about the hotspot-runtime-dev mailing list