4

このコードでJavaプログラムを起動しようとしています:

ProcessStartInfo info = new ProcessStartInfo();
        info.WorkingDirectory = @"D:\2\server";
        info.FileName = "java";
        info.Arguments = "-Xms512m -Xmx1536m -Xbootclasspath/p:./libs/jsr166.jar -cp ./libs/*;server.jar server.Server";
        ServerProcess = new Process();
        ServerProcess.StartInfo = info;
        ServerProcess.Start();

しかし、常にエラーが発生します:

VMの初期化中にエラーが発生しましたオブジェクトヒープ用に十分なスペースを予約できませんでしたJava仮想マシンを作成できませんでした。

しかし、コードを使用して.batファイルを作成する場合:

java -Xms512m -Xmx1536m -Xbootclasspath/p:./libs/jsr166.jar -cp ./libs/*;server.jar server.Server
  • 大丈夫!

だから私は私のC#コードに何か問題があると思いますか?

ありがとう!

4

2 に答える 2

0

.NET アプリケーションから起動するときは、メモリ割り当てコマンドを削除する必要があります。あなたの場合、正しいコマンドは次のとおりです。

    ProcessStartInfo info = new ProcessStartInfo();
    info.WorkingDirectory = @"D:\2\server";
    info.FileName = "java";
    info.Arguments = "-Xbootclasspath/p:./libs/jsr166.jar -cp ./libs/*;server.jar server.Server";
    ServerProcess = new Process();
    ServerProcess.StartInfo = info;
    ServerProcess.Start();

それが少なくとも私にとってはうまくいきました。

于 2012-11-07T22:27:38.503 に答える
0

これが役立つかどうかはわかりませんが、Process オブジェクトには、プロセスに割り当てるメモリの制限があることはわかっています。バッチ ファイルが機能するため、JVM のヒープ割り当てが、関連するプロセスに許可されているピーク メモリを超えていると思います。残念ながら、Process オブジェクトによって割り当てられる最大メモリを増やす方法はわかりません。

私は、バッチ ファイル アプローチに固執するか、 IKVM: http://www.ikvm.net/を使用するか、jni4net: http://jni4net.sourceforge.net/を使用するかのいずれかに投票します。

于 2012-06-28T16:42:35.007 に答える