我有一个典型的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]
答案 0 :(得分:0)
完成Java虚拟机后,您将需要销毁JVM实例:
(*jvm)->DestroyJavaVM(jvm);
JNIEnv
引用由JVM管理,因此您无需明确释放它。