<div dir="ltr">I have run a series of benchmarks of Panama, JNI, JNA, and JNR based on the latest JDK. Here is its GitHub repository:<br><div><br></div><div>    <a href="https://github.com/Glavo/java-ffi-benchmark">https://github.com/Glavo/java-ffi-benchmark</a></div><div><br></div><div>Here I tested the performance of no-ops, accessing structs, string conversions, and callbacks, respectively. I also tried the new isTrivial linker option.</div><div>I summarized the results in README and charted them.<br></div><div><br></div><div>In this email, in addition to sharing the above results, I would also like to talk about several issues I have encountered<br></div><div><br></div><div>1. MemorySegment.getUtf8String is unexpectedly slow</div><div><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div>Panama is much faster than JNA in most cases, but the operation of converting C strings to Java strings is an exception.</div><div>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. </div><div>Perhaps this method can be optimized.</div></blockquote><div><br></div><div>2. StructLayout must manually specify all padding</div><div><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div>Can we provide a convenient method for automatically padding between fields based on alignment?</div><div>The current structLayout method is annoying for situations where you need to manually simulate the layout of a C struct.</div></blockquote><div><br></div><div>Glavo</div></div>