2011-07-06 34 views
2

我有一個典型的C++代碼,啓動JNI:如何釋放JNI env指針?

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:的25941個字節的內存泄漏從120塊JVM_FindSignal分配[JVM.DLL]

回答

0

當您使用Java虛擬機做,你將需要銷燬JVM實例:

(*jvm)->DestroyJavaVM(jvm); 

JNIEnv引用由JVM管理,因此您不需要明確地釋放它。

+0

我正在銷燬JVM實例。那麼可以肯定地說PurifyPlus發出虛假警告?是否有任何官方文件/頁面談論這個?我找不到一個。 – rockoder

+0

我要去http://java.sun.com/docs/books/jni/html/invoke.html#28719中的示例。 JVM本身完全有可能存在內存泄漏。 –