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