棘手问题,Java中大量数据处理

nhk_csdn 2004-07-27 03:39:06
在一个java应用中,要处理一个有几百万条记录的文件,把这些记录实例化成对象后内存就溢出了,怎么能够有好的办法,节省点内存呢?
...全文
1080 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
nhk_csdn 2004-07-28
  • 打赏
  • 举报
回复
registered(已注册)
麻烦简单介绍一下Memory Mapped File
看来还是要用数据库:(
registered 2004-07-28
  • 打赏
  • 举报
回复
Focus...
BTW: 100万记录用 ArrayList 绝对不是一个好注意,
如果处理过程不需要将所有数据都实例化后才能进行的化,
你可以用一下 Memory Mapped File,
如果必须将所有数据都实例化后才能计算那就不如用一个数据库了,
推荐 IBM 的 Cloudscape 嵌入式数据库
wangyanqiu 2004-07-28
  • 打赏
  • 举报
回复


up
nhk_csdn 2004-07-28
  • 打赏
  • 举报
回复
自己顶
刚又做了个测试,object不过10m,但我怎么在进程里看到java进程占了60多m的内存呢?
nhk_csdn 2004-07-28
  • 打赏
  • 举报
回复
api我看过了,谢谢registered(已注册)
我主要是要在内存里处理一些数据,比如相同关键字的数据合并
我想导到文件里不一定是个好办法,我在考虑别的什么方案
不是很明白java的内存怎么分配的,实际数据的大小和java进程的内存占用差距太大了
registered 2004-07-28
  • 打赏
  • 举报
回复
Buffer具体用法见:
http://java.sun.com/j2se/1.4.2/docs/api/java/nio/Buffer.html
registered 2004-07-28
  • 打赏
  • 举报
回复
请你先介绍一下你的处理流程
看能不能用Memory Mapped File

这个东西语法很简单
FileChannel fc1;
MappedByteBuffer mbb;


fc1 = new RandomAccessFile(src, "r").getChannel();
mbb = fc1.map(FileChannel.MapMode.READ_ONLY, 0, fc1.size());
不过是按照字节读数据的
但是性能有保证
nhk_csdn 2004-07-27
  • 打赏
  • 举报
回复
是一个后台应用,要对数据处理,不实例化应该不行吧,我觉得很奇怪,我的一个实例大小300b左右,放在一个ArrayList里,100w个实例不过300m左右,但进程里确占了2g左右内存,为什么呀?
tomuno 2004-07-27
  • 打赏
  • 举报
回复
处理大量数据一般要用到weblogic
registered 2004-07-27
  • 打赏
  • 举报
回复
是否必须将他们都实例化?
你可以使用随机文件读写
或者把 jvm 使用内存数目增大
或者干脆用个数据库

62,623

社区成员

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

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