RFR: 8241234: Unify monitor enter/exit runtime entries
Yudi Zheng
yudi.zheng at oracle.com
Thu Mar 26 13:48:38 UTC 2020
Hi Coleen,
The monitor exit entries are marked with JRT_LEAF which contains
> debug_only(NoHandleMark __hm;) \
This disallows the creation of Handle within the monitor exit entries.
> # A fatal error has been detected by the Java Runtime Environment:
> #
> # Internal Error (open/src/hotspot/share/runtime/handles.cpp:35), pid=28631, tid=28687
> # assert(_no_handle_mark_nesting == 0) failed: allocating handle inside NoHandleMark
I have uploaded a version that addresses the following comments:
1. Have monitor_enter_helper take Handle as arguments.
2. Avoid using _obj as parameter name as it indicates a field according to the coding conventions.
3. oop obj(_obj); is not necessary as there is an implicit conversion from oopDesc* to oop
See http://cr.openjdk.java.net/~yzheng/8241234/webrev.02/ <http://cr.openjdk.java.net/~yzheng/8241234/webrev.02/>
Let me know if there is any other problem.
Many thanks,
Yudi
> On 25 Mar 2020, at 15:49, coleen.phillimore at oracle.com wrote:
>
>
>
> On 3/24/20 1:14 PM, Yudi Zheng wrote:
>> Hi Coleen,
>>
>> Thanks for the review! Sorry I missed your email. And thanks Vladimir for the reminder.
>>
>>>> I think you should have monitor_enter_helper and maybe monitor_exi_helper both take Handle as arguments. This looks very strange.
>>
>> Shall we change ObjectSynchronizer::exit to accept Handle as argument as well?
>
> I think you should.
>>
>>>> +void SharedRuntime::monitor_enter_helper(oopDesc* _obj, BasicLock* lock, JavaThread* thread) {
>>>> Because it creates a Handle anyway. We try to eagerly pass Handle so that we don't have to search through the code to make sure there aren't any unhandled oops.
>>>> The _obj parameter name doesn't follow coding conventions (I was looking for it to be a field in something).
>>
>> I took the parameter name from the original methods:
>> JRT_BLOCK_ENTRY(void, SharedRuntime::complete_monitor_locking_C(oopDesc* _obj, BasicLock* lock, JavaThread* thread))
>> JRT_LEAF(void, SharedRuntime::complete_monitor_unlocking_C(oopDesc* _obj, BasicLock* lock, JavaThread * THREAD))
>> Will Change that.
>>
>>>> + oop obj(_obj);
>>>> Is there not already a implicit conversion from oopDesc* to oop?
>>
>> Also took from the original methods. Will get rid of that.
>
> Great. thank you.
> Coleen
>>
>> Thanks,
>> Yudi
>>
>>>> Thanks,
>>>> Coleen
>>>> On 3/20/20 11:03 AM, Yudi Zheng wrote:
>>>>> Hello,
>>>>>
>>>>> Please review this patch that unifies the monitor enter/exit runtime entries used by C1, C2, and JVMCI.
>>>>>
>>>>> https://bugs.openjdk.java.net/browse/JDK-8061553 <https://bugs.openjdk.java.net/browse/JDK-8061553> added support for faster "slow" locking paths.
>>>>> These paths are not currently used by JVMCI (or C1) leading to slower performance on programs
>>>>> that have a lot of short lived locked sections (such as dacapo:h2).
>>>>>
>>>>> This patch creates helper methods based on C2’s monitor enter/exit entries, and shares with the C1,
>>>>> JVMCI runtimes. It will prevent these runtimes from missing future updates.
>>>>>
>>>>> https://bugs.openjdk.java.net/browse/JDK-8241234 <https://bugs.openjdk.java.net/browse/JDK-8241234>
>>>>> http://cr.openjdk.java.net/~yzheng/8241234/webrev.00/ <http://cr.openjdk.java.net/~yzheng/8241234/webrev.00/>
>>>>>
>>>>> Many thanks,
>>>>> Yudi
More information about the hotspot-compiler-dev
mailing list