JNI C++/C -> Java
メモリ管理
DeleteLocalRef()
ReleaseStringUTFChars()
を使うといいらしい。
*
GetStringChars -> ReleaseStringchars
GetStringUTFChars ->ReleaseStringUTFChars
GetStringCritical->ReleaseStringCritical
GetBooleanArrayElements->ReleaseBooleanArrayElements
GetByteArrayElements->ReleaseByteArrayElements
GetCharArrayElements->ReleaseCharArrayElements
GetShortArrayElements->ReleaseShortArrayElements
GetIntArrayElements->ReleaseIntArrayElements
GetLongArrayElements->ReleaseLongArrayElements
GetFloatArrayElements->ReleaseFloatArrayElements
GetDoubleArrayElements->ReleaseDoubleArrayElements
DeleteGlobalRef
void DeleteGlobalRef(JNIEnv *env, jobject globalRef);
globalRef によって示されたグローバル参照を削除します。
JNIEnv インタフェース関数テーブルのインデックス 22
env: JNI インタフェースポインタ
globalRef: グローバル参照
ローカル参照は、ネイティブメソッドの呼び出し期間中有効です。ローカル参照は、ネイティブメソッドが復帰すると自動的に解放されます。各ローカル参照は、Java 仮想マシンのリソースをいくらか消費します。プログラマは、ネイティブメソッドがローカル参照を過剰に割り当てないように確認する必要があります。ローカル参照は、ネイティブメソッドが Java に復帰すると自動的に解放されますが、ローカル参照を過剰に割り当てると、ネイティブメソッドの実行中に VM がメモリを使い果たしてしまう可能性があります。
DeleteLocalRef
void DeleteLocalRef(JNIEnv *env, jobject localRef);
localRef によって示されたローカル参照を削除します。
JNIEnv インタフェース関数テーブルのインデックス 23
env: JNI インタフェースポインタ
例外
FindClass
- ClassFormatError: クラスデータが有効なクラスを指定しなかった場合
- ClassCircularityError: クラスまたはインタフェースが、それ自体のスーパークラスまたはスーパーインタフェースになる場合
- NoClassDefFoundError: 要求されたクラスまたはインタフェースに対する定義が見つからなかった場合
- OutOfMemoryError: システムがメモリ不足の場合
GetStaticMethodID
- NoSuchMethodError: 指定された static メソッドが見つからない場合
- ExceptionInInitializerError: 例外のため、クラス初期化が失敗した場合
- OutOfMemoryError: システムがメモリ不足の場合
IsInstanceOf
GetArrayLength
GetIntArrayElements
NewStringUTF
- OutOfMemoryError: システムがメモリ不足の場合
参考URL
最終更新:2007年03月15日 01:53