jmethodID
あるスレッドで別のスレッドで initializedを使用できますか? jmethodID
あるスレッドで初期化して別のスレッドで使用しているjniプログラムを実行すると、jvmがクラッシュするため、これを尋ねました。これが原因かも?と思いました。
jmethodID
先頭で宣言することにより、グローバル変数として保持しています。次に、呼び出しの1つで初期化し、後続の呼び出しで再利用しようとします。
jmethodID
あるスレッドで別のスレッドで initializedを使用できますか? jmethodID
あるスレッドで初期化して別のスレッドで使用しているjniプログラムを実行すると、jvmがクラッシュするため、これを尋ねました。これが原因かも?と思いました。
jmethodID
先頭で宣言することにより、グローバル変数として保持しています。次に、呼び出しの1つで初期化し、後続の呼び出しで再利用しようとします。
JNI仕様からの引用:
フィールド ID またはメソッド ID は、VM が ID の派生元であるクラスをアンロードすることを妨げません。クラスがアンロードされると、メソッドまたはフィールド ID は無効になります。したがって、ネイティブ コードは次のことを確認する必要があります。
keep a live reference to the underlying class, or recompute the method or field ID
メソッドまたはフィールド ID を長期間使用する場合。