On Tue, 23 Jul 2024 13:20:27 GMT, Coleen Phillimore <cole...@openjdk.org> wrote:
>> src/hotspot/share/runtime/lightweightSynchronizer.cpp line 77: >> >>> 75: using ConcurrentTable = ConcurrentHashTable<Config, >>> MEMFLAGS::mtObjectMonitor>; >>> 76: >>> 77: ConcurrentTable* _table; >> >> So you have a class ObjectMonitorWorld, which references the >> ConcurrentTable, which, internally also has its actual table. This is 3 >> dereferences to get to the actual table, if I counted correctly. I'd try to >> eliminate the outermost ObjectMonitorWorld class, or at least make it a >> global flat structure instead of a reference to a heap-allocated object. I >> think, because this is a structure that is global and would exist throughout >> the lifetime of the Java program anyway, it might be worth figuring out how >> to do the actual ConcurrentHashTable flat in the global structure, too. > > This is a really good suggestion and might help a lot with the performance > problems that we see with the table with heavily contended locking. I think > we should change this in a follow-on patch (which I'll work on). I inlined the table in the surrounding object as it is a trivial change. Removing both indirections and creating static storage I would require more work (some conditional deferred creation, similar to an optional). ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/20067#discussion_r1713909990