Comparing the performance of Panama with JNI, JNA, and JNR - based on Java 21

Glavo zjx001202 at gmail.com
Fri Mar 24 19:07:09 UTC 2023


I have run a series of benchmarks of Panama, JNI, JNA, and JNR based on the
latest JDK. Here is its GitHub repository:

    https://github.com/Glavo/java-ffi-benchmark

Here I tested the performance of no-ops, accessing structs, string
conversions, and callbacks, respectively. I also tried the new isTrivial
linker option.
I summarized the results in README and charted them.

In this email, in addition to sharing the above results, I would also like
to talk about several issues I have encountered

1. MemorySegment.getUtf8String is unexpectedly slow

Panama is much faster than JNA in most cases, but the operation of
converting C strings to Java strings is an exception.
I checked the source code of JNA and Panama, and the suspicious difference
is that JNA uses strlen from the C standard library, while Panama uses Java
loops.
Perhaps this method can be optimized.


2. StructLayout must manually specify all padding

Can we provide a convenient method for automatically padding between fields
based on alignment?
The current structLayout method is annoying for situations where you need
to manually simulate the layout of a C struct.


Glavo
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/panama-dev/attachments/20230325/9cc51312/attachment.htm>


More information about the panama-dev mailing list