2011-07-21 40 views
4

我有一个应用程序,它从.csv文件加载数据并将其显示在表中。该应用程序可以在Windows中正确运行所有文件(不管它有多大),但它只适用于Mac上低于8MB的文件,任何大于该文件的文件都会抛出“java.lang.OutOfMemoryError:Java堆空间“。我对应用程序进行了调试,以确保它正在读取.csv文件,并且确实如此,但是一段时间后,jush因此错误而崩溃。Mac上的Java OutOfMemory,在Windows上工作

我做了一些研究,尝试使用-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++; 
} 

,帮助我解决这个问题将非常乐意知道的任何建议。

+0

如何启动应用程序?从命令行?从IDE? – GarlicFries

+2

我非常肯定它是某种配置,其中Java允许特定的内存限制,并且您只需要增加该限制即可。 – Sam

+0

我正在创建一个jar文件在Mac上运行它,但现在我正在从IDE启动应用程序以尝试修复错误。 –

回答

4

-Xmx是正确的答案。根据平台的不同,Java对于最大堆空间的默认设置是奇怪的(有时低至8MB)。

如果您的应用程序捆绑在JAR与主级INF指令,下面应该为你工作:

java -Xmx256m -jar myapp.jar

+1

你说得对,好像我在错误的地方使用-Xmx。谢谢 –

+0

订单问题:'java -jar app.jar -Xmx200M'在Linux上工作,如果您按照此顺序编写params,则在Mac上忽略'Xmx' – lynxoid

1

使用Java捆扎机生成应用
在属性选项卡,在VM选项中,插入:“-Xmx512m”,不含引号

相关问题