作者tstanly ()
看板java
标题Re: [问题] 阵列问题
时间Sat Jan 16 01:24:54 2010
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
1F:推 LPH66:由於是 4 的 mer 次方的关系, 试试改用 1<<(2*mer) 看看? 01/16 02:16
2F:推 LPH66:喔我错了 原因是这个阵列需要 1.22G 的空间... 01/16 02:20
3F:→ LPH66:5001*65537*4 = 1311002148 byte 约为 1.22G.... 01/16 02:22
4F:推 LPH66:而你只有 -Xmx1024M 这才留了 1G 出来而已 @_@ 01/16 02:24
5F:推 danshu:老师是对的... 01/26 09:31