如何释放JNI env指针?

时间:2011-07-06 06:56:55

标签: c++ java-native-interface

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

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

这很好用。但是我没有在代码中的任何地方释放env。我想知道我是否需要释放它?如果是的话,怎么样?

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

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

PurifyPlus发出的警告是:

[W] MLK:来自JVM_FindSignal中分配的120个块的25941个字节的内存泄漏[JVM.DLL]

1 个答案:

答案 0 :(得分:0)

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

(*jvm)->DestroyJavaVM(jvm); 

JNIEnv引用由JVM管理,因此您无需明确释放它。