Java程序运行内存空间不足有哪些解决办法

mythee 2010-01-09 11:25:52
现在正在编一Java程序,需要用到三个double类型数组。每个数组有元数1亿多个,三个数组共需内存2.3G左右。数组需要随机访问。
而在Windows下JVM内存最大就是1500M左右。显然这个问题很严重。
一个解决办法是把三个数组保存到硬盘上,但不知如何进行?且从硬盘上读取数据的策略需要优化才能使程序运行速度加快。
或者有什么其它的解决办法?

例如随机从每个数组中任选一个元素相加求和,程序应当如何写?

谢谢各位在此讨论。


源码样例如下:
public class memtest {
public double r[], aux[],score[];
int numNodes=105896555;

public void init() {
score = new double[ numNodes ];
r = new double[ numNodes ];
aux = new double[ numNodes ];
}

public static void main(String[] args) {
memtest m=new Memtest();
System.out.println("start...");
m.init();
System.out.println("finished.");
}

}
...全文
969 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
SambaGao 2010-01-09
  • 打赏
  • 举报
回复
放到oracle 支持Tb
icy_csdn 2010-01-09
  • 打赏
  • 举报
回复
1. 这样说大概有3亿个数据,如果保存在数据库中的话,肯定是死路一条;
2. 可考虑保存在三个独立的lucene中,保存时每个数要有一个ID,最好用int;
3. 运行时,随机生成三个[0~1亿]之间数,分别根据这3个娄从lucene中查询,查询时间应该在毫秒级;
warrior30 2010-01-09
  • 打赏
  • 举报
回复
2个多G.还是放在数据库中吧
TzSword 2010-01-09
  • 打赏
  • 举报
回复
JVM内存最大就是1500M左右
改了它.........
我的C:\Program Files\MyEclipse 6.0\eclipse\eclipse.ini
-showsplash
com.genuitec.myeclipse.product
--launcher.XXMaxPermSize
256m
-vmargs
-Xms128m
-Xmx512m
-Duser.language=en
-XX:PermSize=512M
-XX:MaxPermSize=512M
改了下面两个....运行完在改过来........嘿嘿
itskill 2010-01-09
  • 打赏
  • 举报
回复
将数组存入数据库中,动态从数据库中取得。
sotom 2010-01-09
  • 打赏
  • 举报
回复
JVM内存最大就是1500M左右

你的这个涉及到科学计算了吧, 呵呵,就像刚刚被打破的圆周率的计算一样,用的linux操作系统,4磁盘阵列 。 关注 。帮顶。
zl3450341 2010-01-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 crazylaa 的回复:]
存数据库,采用分区表。数值上建索引
[/Quote]
~
mythee 2010-01-09
  • 打赏
  • 举报
回复
补充一点,数组元素可能在计算过程中要修改。
#9楼
我的建议。
自定义一个算法。把每个double用定长的字节写进文件。
然后用RandomAccessFile。流可以一直开着。然后加上线程锁,根据索引算出文件指针的偏移量,进行读取。
如果还想进行优化,可以根据读取的特性,自定义缓存。

这个方法可以试试
crazylaa 2010-01-09
  • 打赏
  • 举报
回复
存数据库,采用分区表。数值上建索引
lgq_0714 2010-01-09
  • 打赏
  • 举报
回复
关注,学习。
houchaofei2008 2010-01-09
  • 打赏
  • 举报
回复
放入数据库中动态取得是个好的解决办法 过分的强求性能 只会把程序搞死 接着我们跟着挂机
存入数据库动态取得吧
abc130314 2010-01-09
  • 打赏
  • 举报
回复
我的建议。
自定义一个算法。把每个double用定长的字节写进文件。
然后用RandomAccessFile。流可以一直开着。然后加上线程锁,根据索引算出文件指针的偏移量,进行读取。
如果还想进行优化,可以根据读取的特性,自定义缓存。
xiaoyy_java 2010-01-09
  • 打赏
  • 举报
回复
学习ing! 帮顶~
wwq101693 2010-01-09
  • 打赏
  • 举报
回复
支持上面的观点,存入数据库中,然后再一点点的取出来,你那数据太大了!

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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