JNI:(* env) - > NewObject是否在Java堆中创建Java对象?

时间:2018-01-11 14:46:59

标签: java c java-native-interface

在下面的代码中,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;
}

0 个答案:

没有答案