Как освободить указатель JNI env? - PullRequest
2 голосов
/ 06 июля 2011

У меня есть типичный код 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: утечка памяти в 25941 байт из 120 блоков, выделенных в JVM_FindSignal [JVM.DLL]

1 Ответ

0 голосов
/ 06 июля 2011

Когда вы закончите работу с виртуальной машиной Java, вам нужно будет уничтожить экземпляр JVM:

(*jvm)->DestroyJavaVM(jvm); 

Ссылка JNIEnv управляется JVM, поэтому вам не нужно явно освобождать ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...