JNI电话的缺点?

时间:2013-12-24 00:06:53

标签: java java-native-interface mmap bytebuffer

我在这里阅读文章:http://www.kdgregory.com/?page=java.byteBuffer

在该页面上,有这一部分:

事实上,我可以看到在纯Java程序中使用直接缓冲区的唯一原因是它们在垃圾收集期间不会被移动。如果你已经阅读了我关于引用对象的文章,你会记得垃圾收集器在处理掉死对象后压缩堆。如果你将大块的堆内存分配为缓冲区,它们可能会作为压缩的一部分被移动,无论你的CPU有多快,都需要时间;它并不是你想要在每个完整系列上做的事情。由于直接缓冲区位于堆外部,因此不受集合的影响。 另一方面,每次数据访问都是JNI调用。只有基准测试才会告诉您这是否有助于或伤害您的特定应用程序。

JNI声明暗示使用JNI有一个缺点,但我不确定它是什么。有人可以帮忙吗?我确实在堆栈溢出上找到了这个问题:Disadvantages of using Java Native Interface

然而,我并不相信该段中陈述的背景,作者暗示缺点是JNI难以调试或者它可以取消jvm。谢谢!

1 个答案:

答案 0 :(得分:0)

JNI取决于您的申请。有时您将使用第三方c库。 Ant库可能未经过全面测试。它将包含内存泄漏或无效内存访问的错误。有两个问题是JNI的大问题。它会使您的应用程序崩溃。

您可以在c中编写一个简单的库:

int * a = NULL;
*a = 20;

并在JAVA中调用代码。您的JAVA应用程序将在没有JVM输出的情况下关闭,并且您无法在JAVA中捕获任何异常。