RFR: 8353588: [REDO] DaCapo xalan performance with -XX:+UseObjectMonitorTable [v2]
Axel Boldt-Christmas
aboldtch at openjdk.org
Thu Apr 3 16:07:13 UTC 2025
On Thu, 3 Apr 2025 12:46:42 GMT, Roman Kennke <rkennke at openjdk.org> wrote:
>> Like #24098, but clears the BasicLock cache before calling inflate_and_enter().
>>
>>
>> diff --git a/src/hotspot/share/runtime/deoptimization.cpp b/src/hotspot/share/runtime/deoptimization.cpp
>> index f7e0844639b..f17c46fea38 100644
>> --- a/src/hotspot/share/runtime/deoptimization.cpp
>> +++ b/src/hotspot/share/runtime/deoptimization.cpp
>> @@ -1667,6 +1667,9 @@ bool Deoptimization::relock_objects(JavaThread* thread, GrowableArray<MonitorInf
>> // was fast_locked to restore the valid lock stack.
>> ObjectSynchronizer::enter_for(obj, lock, deoptee_thread);
>> if (deoptee_thread->lock_stack().contains(obj())) {
>> + if (UseObjectMonitorTable) {
>> + lock->clear_object_monitor_cache();
>> + }
>> LightweightSynchronizer::inflate_fast_locked_object(obj(), ObjectSynchronizer::InflateCause::inflate_cause_vm_internal,
>> deoptee_thread, thread);
>> }
>
> Roman Kennke has updated the pull request incrementally with one additional commit since the last revision:
>
> Clear cache before enter_for()
Alright. I'll hope we can improve this mechanism to be less fragile and more obvious in the future.
The stack cache was always written to be for C2 and the CacheSetter was there to cover all the other places we construct these BasicLocks in case they appear in a C2 frame. Now we are using it bidirectionally in both enter and exit.
But this should work, and I know you are working on future improvements here @coleenp
Thanks for the fix @rkennke
-------------
Marked as reviewed by aboldtch (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/24413#pullrequestreview-2740439741
More information about the hotspot-dev
mailing list