社区
Java SE
帖子详情
?求指点超大文本的内存组织
yuyosh
2017-03-21 10:43:11
做一个计算,需要读入两个文本文件,一个210M,一个19.2G,因为在处理过程中要频繁访问(一次运行要访问几千次),所以选择直接读入内存,用的是map。
现在借用了一台工作站,内存64G,-XMX60000,读第二个文件的时候走不下去了,没有报错,但昨天读到今天还没读完。
没辙了,请大家指点!
...全文
149
3
打赏
收藏
?求指点超大文本的内存组织
做一个计算,需要读入两个文本文件,一个210M,一个19.2G,因为在处理过程中要频繁访问(一次运行要访问几千次),所以选择直接读入内存,用的是map。 现在借用了一台工作站,内存64G,-XMX60000,读第二个文件的时候走不下去了,没有报错,但昨天读到今天还没读完。 没辙了,请大家指点!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
galiniur0u
2017-03-22
打赏
举报
回复
这种大文件想要一次性的读入内存是不太现实的,除非你的机器超级棒。的19G文件既然是按行算的,那么是否可以将19G的文本进行分片,每个文本划分为512M或者是256M,并为每个文本编号。这样每次都按照编号进行查找读取,虽然速度不是很快,但相对来说还行。 并且是否楼主的这19G文件中的所有条目的匹配频率都是一样的么?如果不一样可以选择把高匹配的先录入内存,低匹配的放在文件里。当内存中找不到的时候再去找文件。 还有楼主的数据是否有规律,如果有规律是否可以按照规律进行划分查找。 只是思路,具体还要楼主实际情况进行考虑。
yuyosh
2017-03-21
打赏
举报
回复
谢谢解答! 我的数据集里面都是一行一行小数据,item-item-number,最大的item的长度也只有260。关键是数量太大了,又要频繁使用。如果用String读入,再做定位标注的话,这个标注的大小也很恐怖。 也考虑过直接放数据库里面,但估计效率影响比较大,用整个数据集的十分之一跑过,用map全读入内存的方式,也要好几天才会出结果,如果放数据库,真不知道效率会成啥样了。 再请大家帮指点,谢谢!
zs808
2017-03-21
打赏
举报
回复
用Map处理这么大的文本文件,简直是难为jvm啊。。。 首先,针对于19.2G的文本文件,估算一下,大概为20615843021B,好,假设你拆分成1kw个条目,那么每个条目的大小为20615B,对于20615B的字符串,共有255^20615种组合。Hash散列函数映射后的元素为Int型,共有255^4个值,那么,hash的碰撞率为255^20615/255^4=255^20611,好吧,hashMap的“Hash”已经差不多报废了。 那么假设,hash冲突率为0,那么拆分成1kw个条目,每次执行hash计算操作时,需要进行20615次Hash迭代,jvm表示压力很大。。。 另外,你设置的-XMX是60000,但是,对于大小为20615的字符串,差不多是直接进老年代了,如果你处理一次后就丢了,那么在进行垃圾收集时,就会对GC产生难以描述的压力。 细思恐极 对于这么大的文本操作,还是别想着用HashMap了,用一个String包下来,然后通过用HashMap来记录起始与终止位置,然后用SubString来处理吧。 别难为可怜的HashMap了。。。
计算机常用英语下载,欢迎使用
3. **RAM** - 随机存取
内存
,临时存储运行中的数据,断电后数据丢失。 4. **ROM** - 只读存储器,存储固定不变的系统信息,如BIOS。 5. **Floppy Disk** - 软盘,一种早期的可移动存储设备,容量较小。 6. **Hard ...
c语言学习指导性教程
学会使用fopen、fread、fwrite、fprintf、fscanf等函数进行
文本
和二进制文件的读写操作,对于开发涉及文件处理的应用至关重要。 在学习C语言的过程中,实践至关重要。编写并运行简单的程序,逐步解决复杂问题,将...
计算机常用英语汇总.doc
3. **RAM (Random Access Memory)**: 随机存取
内存
,是计算机的临时存储空间,用于快速访问和处理数据。 4. **ROM (Read Only Memory)**: 只读存储器,通常存储固定不变的数据,如BIOS。 5. **Floppy Disk**: 软盘...
+计算机专业英语单词+课后答案.pdf
5. Computer Competency(计算机能力):个人或
组织
使用计算机及应用软件的技能水平。 6. Connectivity(连通性):设备之间建立连接的能力,常指网络连接。 7. Data(数据):计算机处理的任何信息,包括
文本
、...
计算机基本英语单词.doc
11. **Mouse**:鼠标,
指点
设备,用于在屏幕上控制光标移动。 12. **Chip**:芯片,通常指的是集成电路,是电子设备中的微型处理器。 13. **CD-R**:光盘可记录,可以写入数据一次的光盘。 14. **HUB**:集线器,...
Java SE
62,625
社区成员
307,257
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章