RFR 8242263: Diagnose synchronization on primitive wrappers
Patricio Chilano
patricio.chilano.mateo at oracle.com
Tue Jul 28 19:16:14 UTC 2020
Hi all,
Please review the following change that adds diagnostic capabilities
when synchronizing on primitive wrapper classes.
Bug: https://bugs.openjdk.java.net/browse/JDK-8242263
Webrev: http://cr.openjdk.java.net/~pchilanomate/8242263/v1/webrev/
The new flag allows to identify synchronization on these classes and to
take one of the following actions: exit the VM with fatal error, log a
warning message, or issue a JFR event. The implementation uses a simple
approach where a check is added at the beginning of the monitorenter
generated code when the flag is enabled to check whether the object is
of a primitive wrapper class. If it is, we jump to the slow path,
otherwise we just continue as always. The extra instructions will be:
load the klass of the object, load the _access_flags field for that
klass, AND with a constant, and branch based on the result. The code
will only be generated whenever the new opt-in diagnostic flag is
enabled so performance won't be affected when off.
In addition to the purpose described in the description of the bug, this
flag will also be useful when trying to diagnose possible
synchronization issues if these classes ever become inline types as part
of the Valhalla project.
I added test SyncOnPrimitiveWrapperTest.java that tests for the exit and
logging cases. I added test TestSyncOnPrimitiveWrapperEvent.java to test
for the JFR event case.
I tested the patch running tiers1-6 in mach5 with the flag set to
DiagnoseSyncOnPrimitiveWrappers=2.
I checked it builds with arm32 and ppc but can't run any tests on those
platforms, so it would be good if somebody can run the new test included
in the patch.
Let me know if you think I should run or add any more tests.
Thanks!
Patricio
More information about the hotspot-runtime-dev
mailing list