2023-01-19 331
我想在C中分配一些内存并将其与Java对象实例保持关联,例如:
void configure(JNIEnv *object, jobject obj, ....) {
char *buf = new char[1024];
// associated <buf> with <obj> somehow
}
,然后在Java对象收集垃圾时释放内存 – 我可以通过从Java对象的 finalize()方法调用JNI函数来做到这一点.
问题是,如何将C指针与Java对象相关联?将A 长字段保留在对象中,并将指针铸成 long ?有更好的方法吗?
通常,如果要将指针从C转移到Java,建议使用long,以便有足够的位置可以保持指针值,以防平台为64位.
.
然后,看看 ByteBuffer.allocateDirect() 创建一个可以与C共享的内存的实例,您可以从Java侧分配此类直接ByteBuffer,然后将其作为a jobject传递给JNI函数在此jni函数内部,您可以使用 GetDirectBufferAddress 函数.
另一种方法是用 NewDirectByteBuffer jni函数来自天然侧.它为您提供了jobject,您将回到Java侧(请注意本地和全球参考).请注意以下事实:一旦创建了本机内存的直接ByteBuffer,您仍然负责管理本机内存:在某个时候,您必须在本机代码中调用delete buf;,Java won won ‘t为您做.
Java没有任何本机指针的概念,因此将其存储为长时间是唯一的真正选择.但是您不应依靠finalize来释放指针.最终化方法是清理资源的一种手段.有关更多详细信息
以上所述是小编给大家介绍的JAVA JNI-将在C中分配的资源与Java对象相关联?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/25906.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态