java JNI库在垃圾收集时释放内存?
我正在使用JCUDA,想知道JNI对象是否足够聪明,可以在垃圾收集时释放它们?我能理解为什么这在所有情况下都不起作用,但我知道它在我的情况下会起作用,所以我接下来的问题是:我如何才能做到这一点?我可以设置“模式”吗?我需要建立一个抽象层吗?或者答案真的是“不,永远不要尝试”,那么为什么不呢
编辑:我指的只是通过JNI创建的本机对象,而不是Java对象。我知道所有Java对象都被平等地对待,即垃圾收集
你可以在下面搜索框中键入要查询的问题!
我正在使用JCUDA,想知道JNI对象是否足够聪明,可以在垃圾收集时释放它们?我能理解为什么这在所有情况下都不起作用,但我知道它在我的情况下会起作用,所以我接下来的问题是:我如何才能做到这一点?我可以设置“模式”吗?我需要建立一个抽象层吗?或者答案真的是“不,永远不要尝试”,那么为什么不呢
编辑:我指的只是通过JNI创建的本机对象,而不是Java对象。我知道所有Java对象都被平等地对待,即垃圾收集
# 1 楼答案
在JNI中创建的Java对象与所有其他Java对象相同,并且在时机成熟时会被垃圾收集和销毁。为了避免过早销毁此类对象,我们经常使用JNI函数
env->NewGlobalRef()
(但它的使用绝不限于在本机中创建的对象)另一方面,本机对象不接受垃圾收集