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

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Fri Mar 24 21:22:48 UTC 2023


Hi Glavo,
that's a very interesting comparison, thank you!

We will look into the C string -> Java string issue. There are probably 
"tricks" [1] that native strlen does which we could replicate in our 
Java code (or we could just do a trivial call to strlen :-) ).

Aso for struct layouts, I think it is a reasonable request - e.g. allow 
creation of struct layouts which are "padded" correctly. But I think 
we'd still want to retain the "raw" variant, which might be useful for 
tools such as jextract.

Cheers
Maurizio


On 24/03/2023 19:07, Glavo wrote:
> 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/20230324/9153aff1/attachment.htm>


More information about the panama-dev mailing list