java から c に渡されるオブジェクトについて少し混乱していますか? それらはネイティブの jni メソッド内で削除する必要があります。そうしないと、メソッドが戻るときにガベージ コレクションが行われます。例えば:
Java ファイルにネイティブ宣言がpublic native printString(String msg);
あり、ネイティブ メソッドを使用const char *message = (jni_env)->GetStringUTFChars(msg, &iscopy);
して文字列の C スタイル文字配列を取得している場合。Shoud I call (jni_env)->ReleaseStringUTFChars(msg, message);
ネイティブメソッドですべてのことをした後。はいの場合、なぜそれが必要なのですか?プログラマーに代わってJavaランタイム環境がこれを実行しないのはなぜですか? 結局、文字列は Java 環境から宣言されて渡されました。