java 大数组,堆栈错误

guangmingdeshenju 2010-10-27 12:12:15
在解决1-N最多约数问题时,用筛选法求解质数数列时,
需设置标志数组,byte [] flag = new byte[500000000],
但编译器报错,推展超出范围啦,我尝试更改参数,将堆栈扩大到800m,但仍然错误,而且机子很卡

1,java 超大数组如何实现?

2,那个标志法可不可用Bit 标识,类似一张位图,这样占用的空间会小 很多阿,java中有操作方法嘛?
...全文
309 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
guangmingdeshenju 2010-10-31
  • 打赏
  • 举报
回复
二维数组非连续 ,这个我咋不知道啊
学习了,试下,在给分啊
小灰狼 2010-10-28
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 chenliuyang 的回复:]
也就500mb内存, 放心能搞定,哈哈,不过你要想弄500mb的连续内存可能会有问题二维数组是非连续的,
[/Quote]


500000000 个元素 * 4字节每个整数 / (1024*1024)M

已经接近2G了,怎么可能只有500M内存
zhuzeitou 2010-10-27
  • 打赏
  • 举报
回复
list同样会挂,毕竟内存是有限的
凉岑玉 2010-10-27
  • 打赏
  • 举报
回复
个人觉得超出范围的错误应该还是数据类型的问题··你试试使用容器··
无伤 2010-10-27
  • 打赏
  • 举报
回复
可以用list代替吧
NewMoons 2010-10-27
  • 打赏
  • 举报
回复
这种问题我觉得不是你用哪个java对象的问题,而是你应该自己设计数据结构,类似于大数运算-
比如1000000000000000000000000*10000000000000000000000000000,这个连编译都通不过。
你必须自己用字符串代替数值,然后自己写逢十进一的算法得出一个更大的字符串。
zdjray 2010-10-27
  • 打赏
  • 举报
回复
计算->存储->计算
chenliuyang 2010-10-27
  • 打赏
  • 举报
回复
也就500mb内存, 放心能搞定,哈哈,不过你要想弄500mb的连续内存可能会有问题二维数组是非连续的,
chenliuyang 2010-10-27
  • 打赏
  • 举报
回复
lz
给分哦,
chenliuyang 2010-10-27
  • 打赏
  • 举报
回复
现所有容器应该不支持这么大的东西, 你可以改改算法,把他包装成一个类, 类中用多维数据来实现,

class ByteFlag(){
private byte[][] byteFlag=new byte[1000][500000];
public byte getValue(int index){
return byteFlag[index/500000][index%500000];
}
public void setValue(int index,byte flag){
byteFlag[index/500000][index%500000]=flag;
}
}
BearKin 2010-10-27
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zhuzeitou 的回复:]

理论上数组大小是一个32位int型,但实际上还要看分配给jvm的内存的
[/Quote]
+1
小灰狼 2010-10-27
  • 打赏
  • 举报
回复
数组是一片连续的内存空间

你要申请一个元素达到5亿的整型数组,需要的内存空间大约是
500000000 * 4 = 20亿 字节
将近2G空间了

想要在系统中找到一片将近2G的内存空间,基本上是不现实的
zhuzeitou 2010-10-27
  • 打赏
  • 举报
回复
理论上数组大小是一个32位int型,但实际上还要看分配给jvm的内存的
guangmingdeshenju 2010-10-27
  • 打赏
  • 举报
回复
那有谁知道java数组最多能放多少各元素阿?
yaoweijq 2010-10-27
  • 打赏
  • 举报
回复
5亿?
用bitmap也要大概
500000000/8/1024/1024mb的内存。。。
占用已经相当多了
估计还是程序实现有问题
bitmap在java里面对应的是java.util.BitSet
但是需要高版本的jdk支持
zmkkobe 2010-10-27
  • 打赏
  • 举报
回复
使用list试试
龙四 2010-10-27
  • 打赏
  • 举报
回复
可以使用bit操作,但是要自己去计算了

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧