读书人

JNI 删除本地引用后怎么判断已经被J

发布时间: 2013-02-25 10:23:36 作者: rapoo

JNI 删除本地引用后,如何判断已经被JVM回收掉了?
在native方法中写下面一段代码,试图判断引用的对象是否被回收:


jstring jstr = env->NewStringUTF("test");
env->DeleteLocalRef(jstr);
if(JNI_TRUE == env->IsSameObject(jstr, NULL))
{
//分支1
//局部引用的对象已经被回收
]
else
{
//分支2
//局部引用的对象没有被被回收
}

程序运行的时候,进入了分支2,是我判断的方法不对,还是引用的对象没有被回收呢?如果是我的判断方法不对,哪位朋友能告诉我下怎么判断呢;先谢谢了。 jni
[解决办法]
引用:
引用:有没有类似的打印语句,打印一下jstr呢
或者使用一下jstr对象,访问它的成员方法,如果是null,会报异常
打印了一下,能够打印出来;删除了本地引用,jvm却没有立即回收引用的对象吗,这个不会造成内存的泄漏吧?

不会的,即使不显式调用DeleteLocalRef,native方法返回后也会被jvm自动回收

另外DeleteLocalRef只是允许垃圾回收器立即回收对象,也不代表马上就回收,可以试试等足够的时间后,再查看

读书人网 >Java相关

热点推荐