1

jmethodIDあるスレッドで別のスレッドで initializedを使用できますか? jmethodIDあるスレッドで初期化して別のスレッドで使用しているjniプログラムを実行すると、jvmがクラッシュするため、これを尋ねました。これが原因かも?と思いました。

jmethodID先頭で宣言することにより、グローバル変数として保持しています。次に、呼び出しの1つで初期化し、後続の呼び出しで再利用しようとします。

4

1 に答える 1

0

JNI仕様からの引用:

フィールド ID またはメソッド ID は、VM が ID の派生元であるクラスをアンロードすることを妨げません。クラスがアンロードされると、メソッドまたはフィールド ID は無効になります。したがって、ネイティブ コードは次のことを確認する必要があります。

keep a live reference to the underlying class, or

recompute the method or field ID

メソッドまたはフィールド ID を長期間使用する場合。

于 2012-06-06T07:39:18.633 に答える