線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2990
推到 Plurk!
推到 Facebook!

java的 Out Of Memory Error問題

答題得分者是:neoart
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-16 01:10:30 IP:203.204.xxx.xxx 未訂閱
請問各位大,關於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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-16 08:10:25 IP:61.56.xxx.xxx 未訂閱
沒看到你的code,想幫你也幫不上忙.
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-16 17:19:28 IP:203.204.xxx.xxx 未訂閱
大大,因為我的程式一千多行,就算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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-16 19:22:28 IP:61.56.xxx.xxx 未訂閱
沒有看到你的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: set search path for bootstrap classes and resources -Xbootclasspath/a: append to end of bootstrap class path -Xbootclasspath/p: prepend in front of bootstrap class path -Xnoclassgc disable class garbage collection -Xincgc enable incremental garbage collection -Xloggc: log GC status to a file with time stamps -Xbatch disable background compilation -Xms set initial Java heap size -Xmx set maximum Java heap size -Xss set java thread stack size -Xprof output cpu profiling data -Xrunhprof[:help]|[:
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-17 15:36:59 IP:203.204.xxx.xxx 未訂閱
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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-17 18:12:41 IP:61.56.xxx.xxx 未訂閱
did you tried ? java -server -Xmx1024 .... (or -Xms1024) hope it helps (I realy like to test/run you code on my PC if you don't mind)
neoart
版主


發表:22
回覆:582
積分:425
註冊:2003-05-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-08-17 18:50:21 IP:61.56.xxx.xxx 未訂閱
for more clearly,the parameter of initalizing jvm is as following: java -server -Xms64mb -Xmx256mb -classpath ........ hope it realy helpful
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-08-18 14:24:29 IP:140.125.xxx.xxx 未訂閱
大大.問題解決了,方法為你所傳授的-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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-08-18 14:49:56 IP:61.64.xxx.xxx 未訂閱
Dear rogan: 很高興幫上你的忙.我的mail是自己家的mail server. john@taiwan-travel.com.tw (事實上我真的沒有用過這一類的參數,能幫上忙真的是很意外)
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-08-18 16:02:58 IP:210.60.xxx.xxx 未訂閱
大大我待會會把ftp ip帳號傳到你信箱, 感謝你的幫忙,讓我後面的作業能順利下去
系統時間:2024-05-18 16:24:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!