java 大数组内存溢出

march_on 2013-07-12 08:53:26
我现在基于probalistic latent semantic indexing(plsa)做图像检索,我的方法和这篇论文很像,需要计算一个条件概率p(z|w,v,d),我直接定义成了“double p_z_d_wt_wv[][][][];”简单地说,z是主题,w是英文单词,v是视觉单词,d是文档,大小分别为12*100*500*7000,就是12个主题,100个英文单词,500个视觉单词,7000个文档,double型的话算下来大概32G,其中z和d的数目是确定的,每个d的w和v的数目是不确定的。我的实现是这样的:


p_z_d_wt_wv = new double[12][7000][][];
for( int t = 0; t < 12; ++t)
{
for( int d = 0; d < 7000; ++d )
{
p_z_d_wt_wv[t][d] = new double[100][500];
}
}

但是这样没分配完就溢出了。我问了很多人,都说用文件或是数据库存储比较好,但是用文件的话怎么定位到某个数组元素呢。如果用数据库的话mongodb可以吗,我现在想试试这个,还没用过
大家有什么好的建议没
...全文
465 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lkq_david 2013-08-13
  • 打赏
  • 举报
回复
虽然我没有什么好办法,但是都放到内存中,这个想法是坚决不能有的,什么都往内存放,后果很严重的
Wuerselen 2013-08-12
  • 打赏
  • 举报
回复
我是来看,打土豪的 还是double的类型。 楼主的想法有问题,找个专门做数据处理的朋友问问吧。 整个想法有问题,TextMining要是都像LZ这么做。 PC的性能,应该是比现在水平要高20倍。 现在计算机的,主流处理思想史流模式。 每次读入buffer,然后处理,然后再在相同的buffer区中读入接下来的数据,进行处理。
JAVA部落 2013-07-14
  • 打赏
  • 举报
回复
对大数据要学会分批处理, 不能总想象着内存有无限大...
jsjszg 2013-07-13
  • 打赏
  • 举报
回复
1、内存要足够大,大于40G 2、你的系统可以寻址超过40G的能力 3、你的虚拟机参数要有40G 以上条件都要满足才行 不过,建议不要这么使用,还是存在磁盘上比较好,可以是文件,也可以是数据库
lcf 2013-07-12
  • 打赏
  • 举报
回复
32G内存的话,你的机子得至少有个40G内存才行啊。。
ldq67123 2013-07-12
  • 打赏
  • 举报
回复
你的机器有32G内存可用?土豪 用文件存储的话就跟你用c++指针一样,自己算偏移
失落夏天 2013-07-12
  • 打赏
  • 举报
回复
大家就不要拿楼主开玩笑了。。 32G内存可行性有多大? 真拿服务器来做实验啊! 楼主这明显就是设计的时候出了问题,这里面大多数的东西基本上都是用不到的,为什么非得放到内存里面呢? 能否只有需要的时候才放到内存里呢?
AsceticXuX 2013-07-12
  • 打赏
  • 举报
回复
引用
引用 6 楼 lcf 的回复:
[quote=引用 5 楼 march_on 的回复:] [quote=引用 4 楼 lcf 的回复:] [quote=引用 3 楼 march_on 的回复:] [quote=引用 2 楼 lcf 的回复:] 32G内存的话,你的机子得至少有个40G内存才行啊。。
引用 1 楼 ldq67123 的回复:
你的机器有32G内存可用?土豪 用文件存储的话就跟你用c++指针一样,自己算偏移
java 单个进程可以分配那么多内存吗[/quote] 64位系统+64位JVM可以[/quote] 我的就是64位win7服务器,64位jvm怎么查看,我安装的好像是64位的jdk,晚上回去看下,另外,64位系统+64位JVM单个进程可以分配的内存有上限吗 [/quote] 基本是没有上限的吧,不过你要设置jvm启动参数,最大堆内存大小设到32G以上,你的物理内存估计要到40G以上,而且是刚重启完的状态。 控制台下用java -version查看[/quote] 学习了~~
AsceticXuX 2013-07-12
  • 打赏
  • 举报
回复
引用
6
学习了~
无聊找乐 2013-07-12
  • 打赏
  • 举报
回复
建议楼主还是好好看看 数据结构吧
lcf 2013-07-12
  • 打赏
  • 举报
回复
引用 5 楼 march_on 的回复:
[quote=引用 4 楼 lcf 的回复:] [quote=引用 3 楼 march_on 的回复:] [quote=引用 2 楼 lcf 的回复:] 32G内存的话,你的机子得至少有个40G内存才行啊。。
引用 1 楼 ldq67123 的回复:
你的机器有32G内存可用?土豪 用文件存储的话就跟你用c++指针一样,自己算偏移
java 单个进程可以分配那么多内存吗[/quote] 64位系统+64位JVM可以[/quote] 我的就是64位win7服务器,64位jvm怎么查看,我安装的好像是64位的jdk,晚上回去看下,另外,64位系统+64位JVM单个进程可以分配的内存有上限吗 [/quote] 基本是没有上限的吧,不过你要设置jvm启动参数,最大堆内存大小设到32G以上,你的物理内存估计要到40G以上,而且是刚重启完的状态。 控制台下用java -version查看
march_on 2013-07-12
  • 打赏
  • 举报
回复
引用 4 楼 lcf 的回复:
[quote=引用 3 楼 march_on 的回复:] [quote=引用 2 楼 lcf 的回复:] 32G内存的话,你的机子得至少有个40G内存才行啊。。
引用 1 楼 ldq67123 的回复:
你的机器有32G内存可用?土豪 用文件存储的话就跟你用c++指针一样,自己算偏移
java 单个进程可以分配那么多内存吗[/quote] 64位系统+64位JVM可以[/quote] 我的就是64位win7服务器,64位jvm怎么查看,我安装的好像是64位的jdk,晚上回去看下,另外,64位系统+64位JVM单个进程可以分配的内存有上限吗
lcf 2013-07-12
  • 打赏
  • 举报
回复
引用 3 楼 march_on 的回复:
[quote=引用 2 楼 lcf 的回复:] 32G内存的话,你的机子得至少有个40G内存才行啊。。
引用 1 楼 ldq67123 的回复:
你的机器有32G内存可用?土豪 用文件存储的话就跟你用c++指针一样,自己算偏移
java 单个进程可以分配那么多内存吗[/quote] 64位系统+64位JVM可以
march_on 2013-07-12
  • 打赏
  • 举报
回复
引用 2 楼 lcf 的回复:
32G内存的话,你的机子得至少有个40G内存才行啊。。
引用 1 楼 ldq67123 的回复:
你的机器有32G内存可用?土豪 用文件存储的话就跟你用c++指针一样,自己算偏移
java 单个进程可以分配那么多内存吗

62,614

社区成员

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

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