JNI:正确管理一个Java对象的生命周期

 2023-01-20    312  

问题描述

当我在C ++中创建本机实现对等时,当JVM删除Java对象时,如何确保本机部件也会被删除?我可以添加Java对象的用户必须明确调用的一些方法,但是我想知道是否有一些挂钩可以在删除Java对象(收集垃圾)时可以处理某些钩子,以便我可以自动删除C ++实现对象也.

我回顾了 jace 似乎是这样做的,但是我需要运行Peerenhancer修补程序生成的类文件(可能是挂钩的方式?或者它需要此修补程序来处理其他内容).但是,我想避免弄乱编译的java文件,我不想要任何花哨的东西

JNI:正确管理一个Java对象的生命周期

推荐答案

这是一个难得的情况,您应该真正使用最终制度,但您也应该使您的Java类也可以关闭.

其他推荐答案

请注意,通过拥抱最终化器,您在最糟糕的地方挠痒痒.在finalizer()中调用JNI就像在驾驶时调整发动机阀的时机.尽管从技术上讲是可能的,但最终泄漏JVM或崩溃也很容易.甚至丝毫触摸多线程,您肯定会在某个时候死锁/崩溃.如果您说”我不想要任何花哨的东西”,我建议使用明确称为方法.是的,要求按惯例进行某些方法顺序是肮脏的设计,但是JNI一般都很肮脏.

如果受人尊敬的JNI库可以执行卧底式仪器,而不是简单地使用最终化器,则可能是有原因的.一些建议阅读(甚至没有提及JNI!):

我的建议是:是的,用虚拟方法distachfrompeer()实现了一个基本,在其中设置了一些”独立”标志,然后在最终器中只需检查标志.

.

以上所述是小编给大家介绍的JNI:正确管理一个Java对象的生命周期,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/25921.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。