//局部引用
JNIEXPORT void JNICALL Java_com_aruba_jniapplication_JniDemo5_localRef
(JNIEnv* env, jobject jobj) {
//创建一个局部引用
jstring jstr = env->NewStringUTF("哈哈");
//使用局部引用
printf("%s",jstr);
//释放局部引用
env->DeleteLocalRef(jstr);
}
创建全局引用
//创建全局引用
jstring global_str;
JNIEXPORT void JNICALL Java_com_aruba_jniapplication_JniDemo5_createGlobalRef
(JNIEnv* env, jobject jobj) {
jobject jstr = env->NewStringUTF("hello");
global_str = (jstring)env->NewGlobalRef(jstr);
}
获取全局引用
//获取全局引用
JNIEXPORT jstring JNICALL Java_com_aruba_jniapplication_JniDemo5_getGlobalRef
(JNIEnv* env, jobject jobj) {
return global_str;
}
删除全局引用
//删除全局引用
JNIEXPORT void JNICALL Java_com_aruba_jniapplication_JniDemo5_delGlobalRef
(JNIEnv* env, jobject jobj) {
env->DeleteGlobalRef(global_str);
}
package com.aruba.jniapplication;
/**
* JNI 引用
*/
public class JniDemo5 {
static {
System.load("C:\\Users\\tyqhc\\source\\repos\\JniApplication\\x64\\Debug\\JniApplication.dll");
}
public native void localRef();
public native void createGlobalRef();
public native String getGlobalRef();
public native void delGlobalRef();
public static void main(String[] args) {
JniDemo5 jniDemo5 = new JniDemo5();
jniDemo5.createGlobalRef();
System.out.println(jniDemo5.getGlobalRef());
jniDemo5.delGlobalRef();
}
}
image.png
//创建弱全局引用
jstring global_weak_str;
JNIEXPORT void JNICALL Java_com_aruba_jniapplication_JniDemo5_createGlobalWeakRef
(JNIEnv* env, jobject jobj) {
jobject jstr = env->NewStringUTF("hello");
global_weak_str = (jstring)env->NewWeakGlobalRef(jstr);
}