JNI:在本机代码中保留Java对象引用的开销?

问题描述

| 我正在考虑通过JNI将JRE集成到C ++应用程序中。 在C ++应用程序中保存对Java对象的大量引用的开销是多少(在JNI看来是全局引用)? 使用此方法时,我是否应该注意任何问题(除了显而易见的问题之外,例如手动取消分配引用)?     

解决方法

(a)开销与您从Java进行的开销相同。您正在防止对象被垃圾回收。 (b)除非正确执行,否则在JNI调用中保留对象引用可能对JVM致命。您需要仔细阅读JNI规范中有关全局和本地引用的部分。您还需要考虑使用弱引用而不是全局引用。     ,这更多的是意见而不是答案,但是考虑到您的选择,我强烈建议您不要使用JNI,而应使用Sockets或Web服务等其他机制在C ++应用程序和Java VM之间进行通信。如果您做对了,那么JNI解决方案显然会比这两种方法都快得多,但是如果性能不是很关键,那么我对JNI的经验就是最好避免这样做。 正如EJP正确指出的那样(+1),如果您不能正确管理JNI Java对象,则将发生非常糟糕的事情-包括VM即将死亡。我还发现很难测试JNI代码。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...