Re: [問題] 陣列問題

看板java作者時間15年前 (2010/01/16 01:24), 編輯推噓4(401)
留言5則, 2人參與, 最新討論串5/6 (看更多)
dear 各位 今天做了一點測試 以下是我的一小部分code ==================================== main(){ //處理fasta資料並儲存相關變數 fastareadin("train0520086rank.fa"); //處理class value class_value_handle(); freq_array=new int[(int)k+1][(int)Math.pow(4, mer)+1]; //trans_array=new int[(int)k+1][(int)Math.pow(4, mer)+1]; //u_y=new int[class_value_allcount+1]; //Pr_jy=new double[(int)Math.pow(4, mer)+1][class_value_allcount+1]; //entropy=new double[(int)Math.pow(4, mer)+1]; } ========================================================= 我的問題主要是做完fastareadin()和class_value_handle()這兩件function後 前者是做將資料讀入 後者是計算資料的類別值之類動作 會大量宣告以下五個array 分別是freq_array, trans_array, u_y, Pr_jy, entropy 現在我先把後面四個陣列宣告先註解掉 先看freq_array這個陣列 首先k值是從fastareadin()這個function得到 以此例子來說 k會等於5000 而mer值是我設定的 例如當我設定mer=8 所以 freq_array=new int[5000][65536+1]; (因為4^8=65536) 這時候eclipse就會出現 Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 的error 也就是說我的main裡面只執行這幾行就會出現這error 所以明顯錯誤是因為freq_array的無法宣告... 而我的eclipse有設定memory的參數 -Xmx1024M 加到最大了..加不上去了..= = 請問我的問題有辦法解決嗎... 我自己的爛方法是宣告多個陣列再合起來 老師的建議是 將所有資料都寫在file 也就是不要宣告陣列... 但我還是想宣告陣列啊....因為code都寫好了 mer=1~10 只有當mer=8,9,10才會出問題.......... 謝謝!!! ※ 引述《tkcn (小安)》之銘言: : ※ 引述《tstanly ()》之銘言: : : 請問一下 : : 如果我的陣列需要太大 : : 導致eclipse會顯示超過memory heap size : : 我增加eclipse的記憶體參數 加到最大了 : : 還是會產生這個問題 : : private int[] test=new int[N]; : : 其中N最大到 : : N=4^9=262144 : : 遇到這種情形該怎麼解決...? 謝謝 : int: 4 byte : 這樣也才 1 mb 而已, : 就算沒設 -Xmx 直接用預設值跑應該也沒問題吧? : 應該要檢查一下程式其他部份。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.133.98

01/16 02:16, , 1F
由於是 4 的 mer 次方的關係, 試試改用 1<<(2*mer) 看看?
01/16 02:16, 1F

01/16 02:20, , 2F
喔我錯了 原因是這個陣列需要 1.22G 的空間...
01/16 02:20, 2F

01/16 02:22, , 3F
5001*65537*4 = 1311002148 byte 約為 1.22G....
01/16 02:22, 3F

01/16 02:24, , 4F
而你只有 -Xmx1024M 這才留了 1G 出來而已 @_@
01/16 02:24, 4F

01/26 09:31, , 5F
老師是對的...
01/26 09:31, 5F
文章代碼(AID): #1BKAJfnR (java)
討論串 (同標題文章)
本文引述了以下文章的的內容:
4
8
以下文章回應了本文
完整討論串 (本文為第 5 之 6 篇):
4
8
0
11
文章代碼(AID): #1BKAJfnR (java)