java的 Out Of Memory Error問題 |
答題得分者是:neoart
|
rogan321
高階會員 發表:21 回覆:307 積分:200 註冊:2003-05-15 發送簡訊給我 |
請問各位大,關於java application的VM到底是如何配置記憶體的,為什麼會出現
這個runtime時的錯誤,再執行時,如果說是處理的資料量過大,以我的經驗實在說
不過去,因為我處理18000多個文字檔時,可以處理結束,同樣的我從18000多個檔
案中攫取5000多個檔案作另一個文字處理,卻總是會出現OutOfMemoryError,還有
Vector有大小限制嗎,因為出問題時..查vector的容量(capacity)都剛好是
655360,(阿如果人工配置又不會是這個值了)但是size則不一定大概都只有
3~4XXXXX筆資料而已,看記憶體也都還有幾
十mb阿,甚至我還自己進行garbage collection的動作也還是會出現這個問題
,這是怎麼回事,哪位大大可以告訴我.....感激不盡 < >< >< >< >< >< >
|
neoart
版主 發表:22 回覆:582 積分:425 註冊:2003-05-09 發送簡訊給我 |
|
rogan321
高階會員 發表:21 回覆:307 積分:200 註冊:2003-05-15 發送簡訊給我 |
大大,因為我的程式一千多行,就算post其中一段,相信各位看起來也是無煞煞
,而且,我想程式碼並無錯誤,數量少些的資料都可以如意跑完,例如5800個檔案
若只給他出錯前的檔案數量,就可完工,這我有嘗試將丟給程式處理的檔案順序調換,並無資訊顯示data有問題,再說其丟出來的錯誤是memory error並非exception,目前個人篇向於認為vector有記憶體容量的上限,並不是無限制的,大多出error的時候,size都在58萬筆左右,data順序調換出error的size就會不同;並非其capacity自動配置的655360,以一筆資料平均100個字元(都是String)來看,大概就是58*100*2BYTE那麼多吧,不知各位大大有沒更好的建議,改用什麼Collection class來存放大量的資料,估計至少要存100萬筆的資料來作運算,由於資料並無重複使用的價值,所以並不想用到資料庫來處理,還是這是vm配置memory的上限了?有沒有哪位大大可告知是否我觀念出錯或有處理大量資料(String)的方法可供參考,拜託了...感激不盡< >< >
|
neoart
版主 發表:22 回覆:582 積分:425 註冊:2003-05-09 發送簡訊給我 |
沒有看到你的code,只好聊一下我的經驗了.希望其他先進指正一下了.
1.我也是有out of memory的問題出現.不過那是一個socket的multi-thread listener,他是每11個小時掛掉一次.不過11h對我的專案算是可以了.所以就沒有深究了.
2.jvm的起始參數有一項:-Xmx(這要用java -X來列出non-standard的參數)可以設定起始heap值.不過我沒有試過.不知其他站台也是如此建議?
(我就順勢列一下這個參數表好了.)
=========================================================
C:\>java -X
-Xmixed mixed mode execution (default)
-Xint interpreted mode execution only
-Xbootclasspath:
|
rogan321
高階會員 發表:21 回覆:307 積分:200 註冊:2003-05-15 發送簡訊給我 |
Neoart大大,目前的問題還是沒有解決,我的平台是2k;不過已大致知道問題的
來源,我利用Runtime.freeMemory()觀察記憶體的變化;首先在for()迴圈中發現
java的rt.gc()是不會自動執行,所以如果遇到大一點的迴圈,memory馬上被消耗
殆盡,所以我在迴圈中,自行依照我要的條件執行gc(),但是我要跑的資料實在
太大了,而所有的資料又不能分批處理,一定要同時整理,雖然有想到用temp檔來
處理,但是這又要增加程式不少變動,麻煩了點,所以到最後,雖然強制
執行gc()但是實在沒有memory了,所以也壓榨不出來,還是會出現memory
error,本來想說是我的實體記憶體太小,我換台大memory的pc來try,也是會在相同的地方出error,再觀察totalMemory,發現不管memory多大,javaVM配的memory
竟然都一樣,所以想到大大的java -X,但是其指令格式不知道如何使用,參數要如
何下,小弟試不出來,可否請大大撥空說明一下,或是有什麼方法可以加大vm的
memory配置,因為後面還有一批量更大的要作相關處理,至於效能,暫時不考慮了,畢竟這程式是用完一兩次就丟棄了^^
.....感激不盡
|
neoart
版主 發表:22 回覆:582 積分:425 註冊:2003-05-09 發送簡訊給我 |
|
neoart
版主 發表:22 回覆:582 積分:425 註冊:2003-05-09 發送簡訊給我 |
|
rogan321
高階會員 發表:21 回覆:307 積分:200 註冊:2003-05-15 發送簡訊給我 |
大大.問題解決了,方法為你所傳授的-X指令,真的很好用,我下的格式如下
java -hotspot -Xms64mb -Xmx256mb -cp classPath className
沒用過的網友也可以試試,對大資料真的很好用,不過麻煩了點^^,不知道有沒有更方便的直接設定法,在賽楊1g下跑5378個檔案共跑了2個小時以上..今天要拿去p4 2.4的來跑8000個檔案....
大大由於這個程式是給敝校研究生做特定資料分析使用,也沒有商業價值,而且只求好寫,依照研究生的需要一直堆積功能函式,所以整支程式壅腫不堪,完全沒有效率可言,如果大大願意指導一下,小弟竭當奉上code,不過如果大大要run,那加上部分的data source壓縮後也要4~50mb,不知該怎麼傳給大大,如果只要code,幾k就ok了
~~真的感激不盡~~
|
neoart
版主 發表:22 回覆:582 積分:425 註冊:2003-05-09 發送簡訊給我 |
|
rogan321
高階會員 發表:21 回覆:307 積分:200 註冊:2003-05-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |