2012-02-21 21 views
2

我有一个java类,确实重位解码和操纵。这个班级几乎占我应用程序总执行时间的96%。我想知道如果我为这些位操作编写一些c代码并使用java本机方法来加载c库,我的性能是否会显着提高?JNI是增加位操作性能的解决方案吗?

+1

可能。这正是大多数JVM可以很好处理的那种代码。如果涉及到对象,数组或触发器,那完全是另一回事。 – harold 2012-02-21 18:36:40

回答

1

我可以看到JNI /本机代码更快的唯一方法是您可以通过将大数据集传递给本地方法来进行位操作来克服JNI调用开销。请注意,与Java方法不同,JNI方法不能通过热点内联/优化。本地调用需要在Java和本机内存区域之间来回复制值。

3

唯一真正的方法是使用专用的Java基准测试工具 - Caliper想到 - 但我个人怀疑你会赢得足够的性能超过JNI开销。

2

正如路易斯所说,知道的最好方法就是衡量。通过JNI调用的开销很大。要问的更好的问题是如果你经常调用你的方法。换句话说,要消耗96%的执行时间,您的位操作方法是否每秒被调用数千次,或者是否在单次调用中执行重要工作?如果是后者,那么很可能您将从本机代码中受益。

相关问题