多线程+读写流+jvm溢出解决

题目:读取10G的数据求和。

              1.流的基本知识:

è¿éåå¾çæè¿°

           字节流和字符流最大区别在,字符流在文件和流中间加了一层缓存。有人说用最好用字节流,速度上我感觉没得到很高提升,主要大多数文件缺失以字节存储比如  视屏,图片。。。。

用那一个?统一用带Buffered    ,一:效率更高。二:方法更全   

 

                2.jvm  内存限制。通常情况下jvm 的默认设置是最大空间是物理内存1/4  ,最小空间是物理内存的1/64 。本机是6G,所以jvm可以得到的最大内存是1.5G.一次加载10G的内容死啦死啦的。Oom是铁定跑不了。一台机器如何最快的求和。那么就分批次加载,为了最大的利用本机效能,一次读取1.5G  并分别在8线程上分别计算汇总。显然如果分别7台机子,最快2秒内就能计算完,流的反复读取是很耗时间的。但是大概10秒内也能完成10G数据统计。

如下工具进行分片:读取
raf = new RandomAccessFile(prth, "r");
MappedByteBuffer map = raf.getChannel().map(FileChannel.MapMode.READ_ONLY, offset, TSize);
线程池申请:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值