JNI 删除本地引用后,如何判断已经被JVM回收掉了?
在native方法中写下面一段代码,试图判断引用的对象是否被回收:
jstring jstr = env->NewStringUTF("test");
env->DeleteLocalRef(jstr);
if(JNI_TRUE == env->IsSameObject(jstr, NULL))
{
//分支1
//局部引用的对象已经被回收
]
else
{
//分支2
//局部引用的对象没有被被回收
}
程序运行的时候,进入了分支2,是我判断的方法不对,还是引用的对象没有被回收呢?如果是我的判断方法不对,哪位朋友能告诉我下怎么判断呢;先谢谢了。
jni
------解决方案--------------------
不会的,即使不显式调用DeleteLocalRef,native方法返回后也会被jvm自动回收
另外DeleteLocalRef只是允许垃圾回收器立即回收对象,也不代表马上就回收,可以试试等足够的时间后,再查看