目前我正在开发一个经常遇到 OutOfMemoryError 的 mac 应用程序。目前我们正在为我们的应用程序使用不可执行的 JAR 文件,因此我无法在启动应用程序之前设置堆大小,因为我的 java 代码将使用 JNI 执行,因此有任何可能的方法来使用 JNI 或 C 设置堆大小。
或上述问题的任何其他解决方案。提前致谢。
目前我正在开发一个经常遇到 OutOfMemoryError 的 mac 应用程序。目前我们正在为我们的应用程序使用不可执行的 JAR 文件,因此我无法在启动应用程序之前设置堆大小,因为我的 java 代码将使用 JNI 执行,因此有任何可能的方法来使用 JNI 或 C 设置堆大小。
或上述问题的任何其他解决方案。提前致谢。
我找到了答案。我使用的是 JNI,所以在创建 JVM 之前,我们必须将 JavaVMOption 参数填充为“-Xms256m”以获取最小大小,将“-Xmx512m”填充为最大大小。它将分配最小 JVM 堆大小为 256 MB,最大 JVM 堆大小为 512 MB。
所以这是帮助别人的代码:
JavaVMInitArgs args;
JavaVMOption options[3];
args.nOptions = 3;
options[0] = (char*)"-Xms256m";
options[1] = (char*)"-Xmx512m";
options[2] = //Your JAR file path.
args.options = options;
然后在创建 JVM 时传递 args(JavaVMInitArgs 对象)。上面的代码将设置最小和最大堆大小。
请记住,在设置最大堆大小之前不要设置最小堆大小,因为在这种情况下,您的最小堆大小将大于或等于最大堆大小并且它会崩溃。