1

したがって、私の質問はJNIのメモリリークに関するものです。

私が持っている場合:

jclass cls = env->FindClass("java/lang/String");
jobjectArray aRow = env->NewObjectArray(col, cls, NULL);
env->DeleteLocalRef(cls);

clsメモリがリリースされることを知っています。ただし、使用する場合:

jobjectArray aRow = env->NewObjectArray(col, env->FindClass("java/lang/String"), NULL);

パラメータとして渡されたjclassは解放されますか?

4

1 に答える 1

1

はい。ただし、現在の JNI メソッドが JVM 呼び出し元に戻った後のみです。その後、GC が処理します。適度な量の参照を作成している限り、これは問題になりません。JVM は、金額が控えめでなくなると通知します。

ただし、完全に正確であるためにはFindClass、他の場所でパラメーターとして使用する前に、 の戻り値を確認する必要があります。JVM が例外をスローした場合でも、NULL を返すことができます。

于 2012-06-19T09:16:45.710 に答える