对于特定的 java 程序,我需要比标准数量更多的内存,但我不能使用命令行来获取更多,因为它使用了启动器。
我尝试在 Java 控制面板的运行时参数中添加“-Xms1024m -Xmx1024m”,这一次有效,但下次我启动程序时,内存又回到了低默认值。我怎样才能可靠地为这个程序获得更多内存?
大多数启动器(至少我看到的那些)都为您提供了应用 jvm 参数的选项。您可以在此处添加您的-Xms1024m -Xmx1024m
. 例如在Launch4J中,您可以这样设置:
您可以在底部看到,您也可以输入自己的参数,尽管内存内容已经作为单独的选项提供。我敢打赌您的启动器应用程序也可以做到这一点。
.exe 启动器似乎反过来更新并启动 .jar 启动器。我通过简单地将内存参数添加到命令行命令来启动 .jar 启动器来解决了这个问题。它不会以这种方式自动更新启动器,但它已经足够好了。
为什么不编写一个简单的 java 进程来引导你的主进程呢?
所以启动器启动进程 A,然后启动进程 B 并使用您需要的参数?
在您的启动器的某处,有一个类似于此的函数调用......
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 文件。但更改肯定会转到启动器。
如果您无法控制启动器,则必须创建自己的 Java 启动器。
您当前的启动器可以启动 JAR,并且可以使用正确的 JVM 参数再次启动 JAR。即一个 JAR 可以使用 Runtime.exec() 来运行它自己(相同的主或不同的),并带有运行程序所需的参数。
AFAIK,您不能使用控制面板通过命令行控制 java 运行。如果它现在不起作用,我怀疑它从未真正起作用,也许它不起作用并不重要。