我有一个从 .csv 文件加载数据并将其显示在表格中的应用程序。该应用程序适用于 Windows 中的所有文件(无论它有多大),但它仅适用于 Mac 上小于 8MB 的文件,任何其他大于 8MB 的文件都会抛出“java.lang.OutOfMemoryError:Java堆空间”。我调试了该应用程序以确保它正在读取 .csv 文件并且确实如此,但过了一会儿它因该错误而崩溃。
我做了一些研究并尝试使用 -Xmx 和 -Xms 来增加 Java 堆大小,但仍然出现相同的错误。
以下代码是应用程序在将一些包含信息的数组添加到 mainHashtable 后崩溃的地方:
while(reader.readRecord()){
ArrayList<CSVEntry> list = new ArrayList<CSVEntry>();
for(int i = 0; i < colscount; i++){
CSVEntry entry = new CSVEntry(headerNames[i], reader.get(i));
list.add(entry);
}
mainHashtable.put(recordcount, list);
recordcount++;
}
任何帮助我解决此问题的建议都将不胜感激。
最佳答案
-Xmx
是正确答案。 Java 对最大堆空间有奇怪的默认值,具体取决于平台(有时低至 8MB)。
如果您的应用程序使用 Main-Class INF 指令捆绑在 JAR 中,则以下内容应该适合您:
java -Xmx256m -jar myapp.jar
关于Mac 上的 Java OutOfMemory,在 Windows 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6783695/