0

プロセス内で jvm を開始し、JNI を使用して Java コードを呼び出すこのネイティブ アプリケーションがあります。

jvm.dll の場所をパス (これは Windows 上にあります) に入れてロードできるようにします。「client」ディレクトリを使用するとすべて正常に動作することに気付きましたが、32- としてコンパイルすると少し、「サーバー」ディレクトリを使用すると、JNI_CreateJavaVM() が失敗し、戻り値 -4 が返されます。

私の知る限り、JVM のクライアント バージョンとサーバー バージョンの両方が動作するはずですが、何が起こっているのでしょうか?

4

1 に答える 1

1

使用可能なメモリよりも多くのメモリを使用するように構成されているために起動できないJVMを作成しているように見えます。

#define     JNI_OK   0
#define     JNI_ERR   (-1)
#define     JNI_EDETACHED   (-2)
#define     JNI_EVERSION   (-3)
#define     JNI_ENOMEM   (-4)
#define     JNI_EEXIST   (-5)
#define     JNI_EINVAL   (-6)

もちろん、他の解釈も利用できます。ただし、システムの空きメモリ、構成パラメーター、および最大プロセスサイズ(古いバージョンのWindowsを使用している場合)を確認しますか。これがあなたが直面している問題かもしれないと思います。

また、「機能するが現在は機能しない」問題についても説明します。おそらく障害発生時に、システムにJVMにコミットするための十分な空きメモリがありませんでした(実行前にすべてのメモリを事前に取得します)。 )。おそらくあなたのサーバーバージョンは限界を押し上げるのに「ちょうど十分」を要求します。

于 2013-03-12T18:00:30.430 に答える