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 インタフェースポインタ

localRef: ローカル参照
JNIの関数一覧
http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/jni/spec/functions.html
○JNI のメモリ開放について
http://java-house.jp/ml/archive/j-h-b/044868.html

例外

FindClass

  • ClassFormatError: クラスデータが有効なクラスを指定しなかった場合
  • ClassCircularityError: クラスまたはインタフェースが、それ自体のスーパークラスまたはスーパーインタフェースになる場合
  • NoClassDefFoundError: 要求されたクラスまたはインタフェースに対する定義が見つからなかった場合
  • OutOfMemoryError: システムがメモリ不足の場合

GetStaticMethodID

  • NoSuchMethodError: 指定された static メソッドが見つからない場合
  • ExceptionInInitializerError: 例外のため、クラス初期化が失敗した場合
  • OutOfMemoryError: システムがメモリ不足の場合

IsInstanceOf

  • 発生しない

GetArrayLength

  • 発生しない

GetIntArrayElements

  • 発生しない

NewStringUTF

  • OutOfMemoryError: システムがメモリ不足の場合

参考URL


タグ:

Java JNI
+ タグ編集
  • タグ:
  • Java
  • JNI
最終更新:2007年03月15日 01:53