如何使用JNI为不可执行的JAR设置堆空间

时间:2013-05-13 06:22:35

标签: java jvm java-native-interface jvm-arguments jvm-crash

目前我正在开发一个mac应用程序,我经常在其中获取OutOfMemoryError。目前我们正在为我们的应用程序使用不可执行的JAR文件,因此我无法在启动应用程序之前设置堆大小,因为我的java代码将使用JNI执行,因此有可能使用JNI或C设置堆大小。

或针对上述问题的任何其他解决方案。 在此先感谢。

1 个答案:

答案 0 :(得分:1)

我找到了答案。我在创建JVM之前使用JNI,我们必须将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对象)。上面的代码将设置最小和最大堆大小。

请记住,在设置最大堆大小之前,还有一件事没有设置最小堆大小,因为在这种情况下,最小堆大小将大于或等于最大堆大小,并且它将崩溃。