【发布时间】:2016-04-17 01:16:34
【问题描述】:
我正在从 Java 运行一个 Rscript,它有两个函数,一个将返回一个数据帧,另一个将返回函数 1 返回的数据帧的列名。
代码对于 400 MB 数据运行良好,但是当我使用超过 400 MB 的数据进行测试时,它会引发异常:线程“main”java.lang.OutOfMemoryError 中的异常:Java 堆空间
我为此尝试了许多解决方案来增加堆大小。
我尝试过的解决方案是:-
我已经编辑了 glassfish 的 domain.xml 文件。
我已尝试使用“set _JAVA_OPTIONS = -Xms1025m -Xmx4gm”设置完整的 Java 选项并导出 JAVA_OPT= -Xms1025m -Xmx4g。
-
将 netbeans.conf 文件编辑为
netbeans_default_options="-J-Xms1025m -J-Xmx4g -J-Xss32m -J-XX:PermSize=128m -J-XX:MaxPermSize=2g -J-Xverify:none -J-Dapple.laf.useScreenMenuBar=true -J-Dapple.awt.graphics.UseQuartz=true -J-Dsun.java2d.noddraw=true -J-Dsun.java2d.dpiaware=true -J-Dsun.zip.disableMemoryMapping=true"
带有 Java 选项的 Crontab -Xms1025m -Xmx4gm
还更改了 netbeansproject->properties->run->vmoption。
但仍然出现同样的错误。
当我尝试使用下面的 Java 代码检查堆大小时。它显示了一些不同的东西。我不知道哪个是正确的,哪个是错误的。堆大小是否更改。如何知道它以及如何解决这个问题? 我在搜索错误时从某个网站获得了此代码。 我得到的输出是 运行:
JVM 空闲内存:10
JVM totalMemory 也等于 JVM 的初始堆大小:10
JVM maxMemory 也等于 JVM 的最大堆大小:168
JVM 中已用内存:162
JVM 中的 freeMemory:6
JVM 中的 totalMemory 显示 Java 堆的当前大小:15
JVM 中的最大内存:168
JVM 位大小:amd64
堆大小 = 163123200
public class MemoryUtil
{
private static final int MegaBytes = 10241024;
public static void main(String args[]) {
long freeMemory = Runtime.getRuntime().freeMemory()/MegaBytes;
long totalMemory = Runtime.getRuntime().totalMemory()/MegaBytes;
long maxMemory = Runtime.getRuntime().maxMemory()/MegaBytes;
System.out.println("JVM freeMemory: " + freeMemory);
System.out.println("JVM totalMemory also equals to initial heap size of JVM : "
+ totalMemory);
System.out.println("JVM maxMemory also equals to maximum heap size of JVM: "
+ maxMemory);
ArrayList objects = new ArrayList();
for (int i = 0; i < 10000000; i++) {
objects.add(("" + 10 * 2710));
}
freeMemory = Runtime.getRuntime().freeMemory() / MegaBytes;
totalMemory = Runtime.getRuntime().totalMemory() / MegaBytes;
maxMemory = Runtime.getRuntime().maxMemory() / MegaBytes;
System.out.println("Used Memory in JVM: " + (maxMemory - freeMemory));
System.out.println("freeMemory in JVM: " + freeMemory);
System.out.println("totalMemory in JVM shows current size of java heap : "
+ totalMemory);
System.out.println("maxMemory in JVM: " + maxMemory);
System.out.println("JVM Bit size: " + System.getProperty("os.arch"));
long heapSize = Runtime.getRuntime().totalMemory();
//Print the jvm heap size.
System.out.println("Heap Size = " + heapSize);
}
}
【问题讨论】:
标签: java glassfish centos6 netbeans-8 rserve