Obsoleting JavaCritical

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Sun Jun 5 21:52:16 UTC 2022


(adding hotspot-dev)

Hi Wojciech,
it is not the goal of Project Panama to obsolete Critical JNI. What we 
would like to do is, obviously, over time, get to a similar level of 
performance (as discussed elsewhere in this mailing list recently, see [1]).

It is possible that there might be other ways to get to the same level 
(or better) of performance than the one you have (I understand that this 
is especially the case with clock_gettime, for which an intrinsified 
alternative is available in the JDK - System.nanoTime) - in general 
using native calls for things that only contains a bunch of machine 
instruction is always going to be painful.

That said, I'd like somebody on the hotspot team to add more background 
on the decision of dropping support for JNI critical in 18.

[1] - 
https://mail.openjdk.java.net/pipermail/panama-dev/2022-June/017046.html

On 05/06/2022 22:25, Wojciech Kudla wrote:
> Hi everyone,
>
> Just wanted to let you know that obsoleting Critical JNI natives is going
> to have a very detrimental impact on performance of latency-critical
> software in a few domains like HPC, HFT or systematic market making.
> We heavily exploit this feature and our use case has nothing to do with
> arrays or otherwise slippery scenarios involving JVM-controlled memory. The
> simplest example is calling clock_gettime(CLOCK_REALTIME) to get a high
> resolution timestamp. Some shops in our industry also replace parts of NIO
> with hand-crafted native code for example to get access to syscalls such as
> recvmsg/recvmmsg (either to get hardware timestamps or batch receive or any
> other functionality otherwise unavailable in the JDK.
>
> JavaCritical_ variant of the native implementation is nearly 30% faster for
> extremely short calls like the cases mentioned above compared to the
> standard JNI impl. In case of clock_gettime(CLOCK_REALTIME) it's 23 nanos
> vs 33 nanos on my box but I assure you we make a large number of such calls
> in our industry and this just compounds.
> Luckily with jdk17 we can still run with -XX:+CriticalJNINatives and get
> the desired performance but I just checked a jdk18 build and the cost of
> these calls is back at 33 nanos so this is performance regression.
>
> JavaCritical is an important part of making Java successful in high
> performance-focused areas and taking a step back with more restrictive
> approach in Panama would be a blow to the perception of the platform and
> its value in our field. I'd be more than happy to provide more context if
> needed. I realize things are fluid and there's probably still a lot of work
> in progress, but wanted to make you guys aware JavaCritical is not some
> forgotten feature no one uses. There's a whole industry and scientific
> research that relies on this.
>
> Thanks,
> Wojciech Kudla


More information about the panama-dev mailing list