问题一:
jstring jstrKey;
for(int i=1;i<=1000;++i) {
LPWSTR strKey = L"string";
jstrKey = env->NewString((jchar *)strKey, wcslen(strKey));
}
env->DeleteLocalRef(jstrKey);
问题2:
for(int i=1;i<=1000++i) {
LPWSTR strKey = L"string";
jstring jstrKey = env->NewString((jchar *)strKey, wcslen(strKey));
env->DeleteLocalRef(jstrKey);
}
我在这两个问题中是否正确使用了DeleteLocalRef?
特别是在问题 1 中,我在循环后删除本地引用。我认为这是正确的,并且不需要在循环内调用deletelocalref,因为我没有创建任何新的本地引用。
所以使用方面没有问题DeleteLocalRef
right?
在这两种情况下你都应该打电话DeleteLocalRef()
在循环内,因为每个NewString()
创建一个新的本地引用。
从本机方法返回时,本地引用将被 JNI 丢弃,但此过程与 Java 垃圾收集无关。通常,我们不需要担心本地引用。但本地引用表通常很小,因此我们必须丢弃在相当长的循环上创建的未使用的引用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)