2015-02-10 52 views
0

我正在測試一個在Eclipse中使用Mahout構建的簡單推薦系統。java.lang.OutOfMemoryError:Eclipse中的Java堆空間,不管設置如何

如果首選項文件太大,我收到此錯誤:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
at java.lang.String.substring(String.java:1939) 
    at java.lang.String.subSequence(String.java:1972) 
    at com.google.common.base.Splitter$SplittingIterator.computeNext(Splitter.java:612) 
    at com.google.common.base.Splitter$SplittingIterator.computeNext(Splitter.java:522) 
    at com.google.common.base.AbstractIterator.tryToComputeNext(AbstractIterator.java:64) 
    at com.google.common.base.AbstractIterator.hasNext(AbstractIterator.java:59) 
    at com.google.common.base.AbstractIterator.next(AbstractIterator.java:74) 
    at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.processLine(FileDataModel.java:408) 
    at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.processFile(FileDataModel.java:363) 
    at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.buildModel(FileDataModel.java:259) 
    at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.reload(FileDataModel.java:231) 
    at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.<init>(FileDataModel.java:221) 
    at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.<init>(FileDataModel.java:169) 
    at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.<init>(FileDataModel.java:149) 
    at com.predictionmarketing.itemrecommend.ItemRecommend.main(ItemRecommend.java:35) 

該文件包含約5百萬首分。

我已經看了幾消息關於這個問題,我的eclipse.ini如下

-startup 
../../../plugins/org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar 
--launcher.library 
../../../plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64_1.1.200.v20140603-1326 
-product 
org.eclipse.epp.package.java.product 
--launcher.defaultAction 
openFile 
-showsplash 
org.eclipse.platform 
--launcher.XXMaxPermSize 
3000m 
--launcher.defaultAction 
openFile 
--launcher.appendVmargs 
-vmargs 
-Dosgi.requiredJavaVersion=1.6 
-XstartOnFirstThread 
-Dorg.eclipse.swt.internal.carbon.smallFonts 
-XX:MaxPermSize=3000m 
-Xms3000m 
-Xmx6000m 
-Xdock:icon=../Resources/Eclipse.icns 
-XstartOnFirstThread 
-Dorg.eclipse.swt.internal.carbon.smallFonts 

基本上我加入-Xmx6000m和改變-Xmx和MaxPermSize參數(兩者)3000米。 我不是很流利的Java的,所以我不知道,如果設置正確,但在執行過程中,我可以看到類似

Heap size: 55M of total 3017M max 5996 mark 55M 

這似乎反映了設置。

奇怪的是,在執行過程中我沒有看到堆大小的增加,我的計算機(mac os)中的可用內存也在800M左右。

問題在哪裏? 如果首選項文件較小,一切工作正常。

+0

這是一個程序,你在運行命令的Eclipse內運行?您需要在「運行>運行配置」中更改這些設置。 – 2015-02-10 17:39:03

+0

您可以嘗試使用文件映射。這是一個有用的鏈接:http://www.javacodegeeks.com/2013/05/power-of-java-memorymapped-file.html – Mints97 2015-02-10 17:56:19

+0

@ greg-449是的我從Eclipse運行。我打開了「運行」>「運行配置」,但哪些是我需要更改的設置? – Eugenio 2015-02-10 18:51:14

回答

3

月食一樣。 ini設置僅用於Eclipse應用程序。

當您從Eclipse運行Java應用程序時,您需要轉到'運行>運行配置'。在Java應用程序列表中找到您的應用程序。在「參數」選項卡上,在「虛擬機參數」部分輸入您的內存設置。

+0

我在VM參數部分添加了-Xms3000m -Xmx6000m,它完美地工作,謝謝! Ecplise是否也需要相同的參數(在eclipse.ini中)? – Eugenio 2015-02-11 10:17:15

+1

不,在運行程序時會啓動一個新的JVM,因此它不會更改Eclipse所需的內存。 – 2015-02-11 10:21:02