JDK外部函数Panama API性能超过了JNI
💡
原文中文,约3200字,阅读约需8分钟。
📝
内容提要
本文通过性能基准测试比较了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表现出色,且可以通过特定方法进一步优化。
➡️