我现在基于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可以吗,我现在想试试这个,还没用过
大家有什么好的建议没Java内存溢出数据库存储

解决方案 »

  1.   


    java 单个进程可以分配那么多内存吗
      

  2.   


    java 单个进程可以分配那么多内存吗
    64位系统+64位JVM可以
      

  3.   


    java 单个进程可以分配那么多内存吗
    64位系统+64位JVM可以
    我的就是64位win7服务器,64位jvm怎么查看,我安装的好像是64位的jdk,晚上回去看下,另外,64位系统+64位JVM单个进程可以分配的内存有上限吗
      

  4.   


    java 单个进程可以分配那么多内存吗
    64位系统+64位JVM可以
    我的就是64位win7服务器,64位jvm怎么查看,我安装的好像是64位的jdk,晚上回去看下,另外,64位系统+64位JVM单个进程可以分配的内存有上限吗

    基本是没有上限的吧,不过你要设置jvm启动参数,最大堆内存大小设到32G以上,你的物理内存估计要到40G以上,而且是刚重启完的状态。
    控制台下用java -version查看
      

  5.   

    java 单个进程可以分配那么多内存吗
    64位系统+64位JVM可以
    我的就是64位win7服务器,64位jvm怎么查看,我安装的好像是64位的jdk,晚上回去看下,另外,64位系统+64位JVM单个进程可以分配的内存有上限吗

    基本是没有上限的吧,不过你要设置jvm启动参数,最大堆内存大小设到32G以上,你的物理内存估计要到40G以上,而且是刚重启完的状态。
    控制台下用java -version查看
    学习了~~
      

  6.   

    1、内存要足够大,大于40G
    2、你的系统可以寻址超过40G的能力
    3、你的虚拟机参数要有40G
    以上条件都要满足才行不过,建议不要这么使用,还是存在磁盘上比较好,可以是文件,也可以是数据库
      

  7.   

    我是来看,打土豪的还是double的类型。楼主的想法有问题,找个专门做数据处理的朋友问问吧。
    整个想法有问题,TextMining要是都像LZ这么做。
    PC的性能,应该是比现在水平要高20倍。现在计算机的,主流处理思想史流模式。
    每次读入buffer,然后处理,然后再在相同的buffer区中读入接下来的数据,进行处理。