如何可靠地为Java提供更多内存?

时间:2012-07-30 09:47:03

标签: java memory

对于特定的java程序,我需要更多的内存,然后是标准数量,但我不能使用命令行来获取更多,因为它使用了启动器。

我尝试将“-Xms1024m -Xmx1024m”添加到Java控制面板中的运行时参数,这只运行一次,但是下次启动程序时,内存又回到了低默认值。 如何可靠地为此程序获取更多内存?

5 个答案:

答案 0 :(得分:3)

大多数发射器(至少是我看过的发射器)为您提供了应用jvm参数的选项。您可以在此处添加-Xms1024m -Xmx1024m。例如,在Launch4J中,您可以这样设置:

Launch4J JRE settings

您可以在底部看到,您也可以输入自己的参数,尽管已经将内存内容作为单独选项提供。我打赌你的启动器应用程序也可以这样做。

答案 1 :(得分:1)

为什么不编写一个只引导主进程的简单java进程?

所以启动程序启动进程A,进程A又使用您需要的参数启动进程B?

答案 2 :(得分:1)

.exe启动程序似乎反过来更新并启动.jar启动器。 我通过简单地将内存参数添加到命令行命令来启动.jar启动器来解决问题。它不会以这种方式自动更新启动器,但它已经足够了。

答案 3 :(得分:0)

在你的发射器的某个地方,有一个类似于此的函数调用....

 JNIEnv* create_vm(JavaVM ** jvm)
 {

JNIEnv *env;
JavaVMInitArgs vm_args;
JavaVMOption options;
strcpy(options.optionString, CLASSPATH); //fix for options.optionString = CLASSPATH;
if (DEBUG) printf("optionString = %s\n", options.optionString); 
vm_args.version = JNI_VERSION_1_6; //JDK version. This indicates version 1.6
vm_args.nOptions = 1;
vm_args.options = &options;
vm_args.ignoreUnrecognized = 0;

int ret = JNI_CreateJavaVM(jvm, (void**) &env, &vm_args);
if (ret < 0) printf("\n<<<<< Unable to Launch JVM >>>>>\n");
return env;
}

正确?如果是这种情况,只需将这些选项添加到optionsString。

听起来你要么硬编码,要么为设置这些属性的启动器提供.config文件。但这种变化肯定会发生在发射器上。

答案 4 :(得分:0)

如果无法控制启动器,则必须创建自己的Java启动器。

您当前的启动程序可以启动JAR,它可以使用正确的JVM args再次启动JAR。即,JAR可以使用Runtime.exec()运行自身(相同的主要或不同的),并使用运行程序所需的参数。

AFAIK,您无法使用控制面板通过命令行控制java运行。如果它现在不起作用,我怀疑它从来没有真正起作用,也许它并不重要,它不起作用。