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表现出色,且可以通过特定方法进一步优化。
➡️

继续阅读