On Mon, 28 Oct 2024 21:26:38 GMT, Phil Race <[email protected]> wrote:
> https://bugs.openjdk.org/browse/JDK-8338677 already improved things for this > so that's good. > > This fix adds to it lazy initialisation of VarHandles in StrikeCache at the > cost of some extra code. > Since these VarHandles get used more or less immediately on Linux this new > fix won't further improve matters there > But should help on Mac where they aren't usually needed at startup > And Windows is somewhere in between. > I suspect dropping `static final` from these `VarHandle`-s would degrade > performance, as some internal checks in `VHs` would not constant-fold. > > Do you need these in isolation, or can you lazily-initialize them all at > once? You can use "holder class" pattern like: > > ``` > static class VHHolder { > static final VarHandle xAdvanceHandle = ... > } > ``` > I suspect dropping `static final` from these `VarHandle`-s would degrade > performance, as some internal checks in `VHs` would not constant-fold. > > Do you need these in isolation, or can you lazily-initialize them all at > once? You can use "holder class" pattern like: > > ``` > static class VHHolder { > static final VarHandle xAdvanceHandle = ... > } > ``` I've been told about this static final optimisation but I've never observed any measurable benefit in other code where I've tried hard to see it. Performance (runtime) isn't a huge concern for this code. Won't be noticed Start up is noticed. And on Windows *some* are used early but not all which is why I chose this approach ------------- PR Comment: https://git.openjdk.org/jdk/pull/21748#issuecomment-2445434568
