在下面的代码中,NewStringUTF
正在调用NewObject
。
我的问题是:“是否在堆中创建了Java对象正确?”
然后,当我致电SetObjectField
时,只会复制指针。在调用SetObjectField
之前,对象本身已经在堆中创建了,对吗?
我的第二个问题是:“我从未打电话给SetObjectField
,什么时候会被垃圾收集?有没有办法从堆中删除这个对象,所以GC不必这样做?” p>
#include "SimpleFile.h"
JNIEXPORT jboolean JNICALL Java_SimpleFile_set
(JNIEnv * env, jobject jobj)
{
jclass jcl;
jfieldID jfid;
jstring jstr;
if(!(jcl=env->GetObjectClass(jobj)))
return JNI_FALSE;
jfid=env->GetFieldID(jcl,"fd","Ljava/lang/String;");
if(!jfid)
return JNI_FALSE;
jstr=(jstring)(env->NewStringUTF("123")); // <==== NewObject
env->SetObjectField(jcl,jfid,(jobject)jstr); // <==== Copying just the pointer, right?
return JNI_TRUE;
}