2011-03-25 29 views
0

我解析一個328kb的文本文件並將內容存儲在一個java列表中。爲什麼在給定文件大小的情況下會得到java.lang.OutOfMemoryError?

這是命令行(我應該使用1GB RAM參數)。

java -Xms128m -Xmx1024m -cp .:jars/* CentroidGenerator data/data.xml 

不過,我得到一個Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

這是代碼,我評論的大部分是用於調試:http://d.pr/pRxe 感謝

+6

如果解析328KB文件給你' OutOfMemoryError的,你做錯了。不幸的是,我的玻璃球在下個星期二到店裏,所以請向我們展示您的代碼。 – Bombe 2011-03-25 11:36:49

+1

@Bombe我已經添加了鏈接! – aneuryzm 2011-03-25 11:38:07

+3

很可能你在程序中的某個地方有無限循環。 – 2011-03-25 11:40:14

回答

22

那麼,該位看起來我錯了:

for (int i=0; i<centroids.size(); i++) {    
    Centroid centroid = new Centroid(...); 
    // Some other code here 
    centroids.add(centroid); 
} 

因此假設centroids的大小爲1.在循環的第一次迭代中,i爲0 ,它小於1.您創建一個Centroid的新實例,將其添加到列表中,然後繼續。現在i是1,但現在centroids.size()是2,所以你繼續...等

基本上,這個循環不會停止,直到你用完內存。

這不是我清楚你在做什麼試圖在迴路的事,但你不想做你做...

+2

+1 ALL HAIL JON SKEET – 2011-03-25 11:47:51

+0

非常好。也看過代碼,但是,大部分功能性編程都沒有考慮到集合的大小在迭代時可能會發生變化...... – Ingo 2011-03-25 11:55:29

相關問題