JDK外部函数Panama API性能超过了JNI
内容提要
本文通过性能基准测试比较了Java本地调用API的性能,发现外部函数接口优于JNI。测试结果显示JNA较慢,JNR略快于Bridj,但仍落后于JNI。JDK的外部API性能比JNI快两倍。Panama API本身比纯Java慢一点,但在本机调用性能方面领先。可以使用池化Arena进行分配并传递Linker.Option.critical()/isTrivial()给downcallHandle选项来进一步提高性能。
关键要点
-
本文比较了Java本地调用API的性能,发现外部函数接口优于JNI。
-
测试结果显示JNA较慢,JNR略快于Bridj,但仍落后于JNI。
-
JDK的外部API性能比JNI快两倍。
-
Panama API本身比纯Java慢一点,但在本机调用性能方面领先。
-
可以使用池化Arena进行分配以提高性能。
-
传递Linker.Option.critical()/isTrivial()给downcallHandle选项也能进一步提升性能。
-
JNI是Java调用本机代码的标准方法,但需要构建本机存根,开发辅助工具可简化此过程。
-
JNA通过动态调用目标函数的本机存根来简化本机包装器的编写,但性能开销较高。
-
Bridj提供Java到Cpp的互操作解决方案,但项目似乎已被放弃。
-
JNR是一个年轻的项目,旨在解决与JNA或Bridj相同的问题。
-
测试结果显示,JNA比JNI慢13倍,JNR比Bridj快但仍落后于JNI。
-
JDK8+的LocalDateTime速度比Calendar API快约2.4倍,但比旧式的java.util.Date慢。
-
在仅研究本机调用的性能时,Panama API表现出色,且可以通过特定方法进一步优化。