我尝试使用以下代码启动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#代码有问题吗?
谢谢!
答案 0 :(得分:0)
我不确定这是否有帮助,但我确实知道Process对象确实为进程分配了内存限制。由于批处理文件有效,我认为JVM的堆分配超过了关联进程允许的峰值内存。不幸的是,我不知道如何增加Process对象分配的最大内存。
我会投票支持批量文件方法或使用IKVM:http://www.ikvm.net/或使用jni4net:http://jni4net.sourceforge.net/。
答案 1 :(得分: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();
这至少对我有用。