#include "space_anyi_jni_reference_WeakGlobalReferenceTest.h" JNIEXPORT jlong JNICALL Java_space_anyi_jni_reference_WeakGlobalReferenceTest_getPersonHandler(JNIEnv *env, jobject this){ //1.获取对应的jclass jclass class_Person = (*env)->FindClass(env, "Lspace/anyi/jni/reference/Person;"); //2.获取对应的构造方法 jmethodID constructor = (*env)->GetMethodID(env, class_Person, "", "(Ljava/lang/String;I)V"); //3.创建对象 jstring name = (*env)->NewStringUTF(env, "杨逸-弱引用"); jobject person = (*env)->NewObject(env, class_Person, constructor,name,18); //4.获取全局弱引用 jobject weakGlobalReference = (*env)->NewWeakGlobalRef(env, person); //5.转换为句柄,使用intptr_t类型作为中间类型,避免精度丢失 jlong handler = (jlong)(intptr_t)weakGlobalReference; return handler; } JNIEXPORT jobject JNICALL Java_space_anyi_jni_reference_WeakGlobalReferenceTest_getPerson(JNIEnv *env, jobject this, jlong handler){ //1.通过句柄获取全局弱引用,使用intptr_t类型作为中间类型 jobject person = (jobject)(intptr_t)handler; return person; } JNIEXPORT void JNICALL Java_space_anyi_jni_reference_WeakGlobalReferenceTest_freePerson(JNIEnv *env, jobject this, jlong handler){ //1.通过句柄获取全局弱引用,使用intptr_t类型作为中间类型 jobject weakGlobalReference = (jobject)(intptr_t)handler; //2.释放全局弱引用 (*env)->DeleteWeakGlobalRef(env, weakGlobalReference); }