JNIEnv *
JNI 関数から取得したの寿命について知りたいAttachCurrentThread()
です。JNIEnv
ポインターを取得する次の関数を考えてみましょう。
JNIEnv * RetrieveJniEnvPtr()
{
JavaVM * pJavaVM; // Assume pJavaVM is already initialized
JNIEnv * pEnv = NULL;
if(pJavaVM->GetEnv((void**)&pEnv, JNI_VERSION_1_6) != JNI_OK)
{
pJavaVM->AttachCurrentThread((void**) &pEnv, NULL);
}
return pEnv;
}
への呼び出しに関連付けられたクリーンアップ呼び出しはありAttachCurrentThread()
ますか?
また、これは軽量機能ですか?RetrieveJniEnvPtr()
同じスレッド内で (この例では) 何度も呼び出すのは、標準的なプログラミング手法ですか? それとも、コードJNIEnv *
はスレッドの存続期間中に 1 回だけ取得する必要がありますか?