如何解决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代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。