测量通过JNI调用的开销

时间:2012-06-08 04:14:19

标签: java java-native-interface

通过使用JNI(而不是编写完整的Java应用程序)来查看我是否真的能够利用本机代码(编写C)的任何好处,我想测量通过JNI调用的开销。衡量这种开销的最佳方法是什么?

4 个答案:

答案 0 :(得分:2)

我不会使用分析器来进行定量性能测试。分析往往会对实际的时间数引入失真。

我创建了一个基准测试,执行了您在C中考虑的实际计算之一,并将C + JNI + Java版本与纯Java版本进行比较。一定要比较苹果和苹果;即在对它们进行基准测试之前对其进行配置和优化。

为了进行实际的基准测试,我构建了一个循环,它执行了大量的计算,记录了大量迭代的时间并进行比较。确保考虑到JVM预热效果;例如类加载,JIT编译和堆预热。


与Thihara一样,我怀疑使用C + JNI会有多大帮助。即使这样,你也需要考虑JNI的缺点;例如C代码可移植性,特定于平台的构建问题......如果您的本机代码存在错误,可能会发生JVM硬崩溃。

答案 1 :(得分:1)

单独测量开销可能会给你带来奇怪的结果。我在Java和C ++中编写性能关键代码的一小部分并测量程序性能,例如,使用caliper(微基准测试是一件非常复杂的事情,几乎没有人能够正确使用它。)

我不会使用任何分析器,尤其是C ++分析器,因为单独使用C ++部分的性能并不重要,因为分析器可能会扭曲结果。

答案 2 :(得分:0)

使用C ++探查器和Java探查器。它们适用于Java的IDE。我只能假设在C ++的情况下。无论您设计什么样的测试,都要经过大量的循环,以尽量减少环境错误。

哦,并且确实发布了结果,因为我也很想知道在现代JVM上使用本机代码是否有任何改进。但是,您可能无法在本机代码中看到巨大的性能提升。

答案 3 :(得分:0)

请看这个link特别是第9.2节 这是一个非常好的相关q&a