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:23:13 UTC 2023


Whoops - forgot the link:

[1] - 
https://stackoverflow.com/questions/11787810/strlen-performance-implementation

On 24/03/2023 21:22, Maurizio Cimadamore wrote:
>
> 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/26d0435f/attachment-0001.htm>


More information about the panama-dev mailing list