如何释放JNI环境指针

How to free the JNI env pointer?

本文关键字:JNI 环境 指针 释放 何释放      更新时间:2023-10-16

我有一个典型的c++代码启动JNI:

JNIEnv* env = NULL;
...
ProcAdd = ( JNI_JVMPROC ) GetProcAddress( hinstLib, "JNI_CreateJavaVM" );
jint createResult = ( ProcAdd ) ( &m_jvm, ( void** ) & env, &vm_args );

这很好。然而,我并没有在代码的任何地方释放嫉妒。我想知道我是否需要释放它?如果是,怎么做?

我在我的代码上运行了PurifyPlus,它在上面代码的下面一行给了我泄漏:

jint createResult = ( ProcAdd ) ( &m_jvm, ( void** ) & env, &vm_args );

PurifyPlus给出的警告是:

[W] MLK: JVM_FindSignal [JVM.DLL]中分配的120块内存泄漏

当您完成Java虚拟机时,您将需要销毁JVM实例:

(*jvm)->DestroyJavaVM(jvm); 

JNIEnv引用是由JVM管理的,所以您不需要显式地释放它。