BufferedWriter的缓冲区大小【平衡点】

Jacky-止涯 2013-10-26 08:12:46
我现在用BufferedWriter来写入文件,设了8k的缓冲区。
我现在想提高写入的效率,是不是缓冲区设置越大越好啊?

我也知道BufferedWriter的缓冲区设置增大,能减少写IO的次数,可是会多消耗内存,增加GC。但是不知道这个两者的平衡点在哪里,这个缓冲区大小的设置,是否有什么技巧。求大神们指导!!

写出文件大概在5G左右。内存绝对够用。
...全文
640 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Inhibitory 2013-10-27
  • 打赏
  • 举报
回复
而且缓冲区只是一个数组,只需要分配一次与回收一次,不会导致GC不这的回收。
Inhibitory 2013-10-27
  • 打赏
  • 举报
回复
给一个参考,好象迅雷最大的缓冲区可以设置到16M
Jacky-止涯 2013-10-27
  • 打赏
  • 举报
回复
我刚刚看了一下StreamEncoder,最后还是各种write到输出流中,只有在flush才会调输出流flush的方法。真搞不懂他是怎么一个操作的……这个输出流写文件到底是一个什么规则呢?
Jacky-止涯 2013-10-27
  • 打赏
  • 举报
回复
引用 4 楼 Inhibitory 的回复:
而且缓冲区只是一个数组,只需要分配一次与回收一次,不会导致GC不这的回收。
引用 1 楼 AA5279AA 的回复:
一个数组对象,如果在while中被多次使用的话,但这个对象的话应该下一次循环的时候就符合垃圾回收机制可以被回收了吧。 最后一个输出流flush(); 在这之前数据应该都存在输出流中。 5G不会是一个文件吧。。 PS:我一般都习惯于设置2K,个人习惯
5G是一个文件! 那就是说,其实缓冲区的大小只是影响写到输出流的频率,其实输出流什么时候写IO和怎么写IO是没有关系的,对吧?
尘缘udbwcso 2013-10-26
  • 打赏
  • 举报
回复
可以自己试几个数据比较一下
失落夏天 2013-10-26
  • 打赏
  • 举报
回复
一个数组对象,如果在while中被多次使用的话,但这个对象的话应该下一次循环的时候就符合垃圾回收机制可以被回收了吧。 最后一个输出流flush(); 在这之前数据应该都存在输出流中。 5G不会是一个文件吧。。 PS:我一般都习惯于设置2K,个人习惯

62,614

社区成员

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

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