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 回答