Java对大文件的处理

通常我编写的swing程序的都会附带完整的日志记录和报错监控功能,并在swing程序的界面上直接提供日志查看功能和程序运行报错弹窗通知能力。最近编写的一个swing程序的每日日志量不小,轻易就能达到几十M甚至上百M,程序使用的堆大小并没有进行特殊设置,是默认的64M,前几日突然发现查看日志功能扛不住了。

我的日志查看功能依赖的是一个老早之前编写的一个类似记事本的文本查看器,其中的文件读取部分非常简单,读取一行就往界面塞上一行,也一直没有发生问题。最近,我为了处理乱码问题,对该文本查看器进行了一次升级,让其支持字符串的解码和编码,结果在使用其查看日志时,程序死掉了,后来一调试才知道是堆内存溢出,而出问题时日志大小不过30几M而已。如果去除该文件读取过程中的解码编码部分,程序运行正常,因此只能推断是在每次解码和编码过程中创建了太多的String对象把堆内存塞爆了,不过创建的也是临时对象啊,不知gc干嘛去了。

对于现在面临的问题,我当然可以采取设置JVM堆大小来解决,不过治标不治本。处理大文件,内存要能够顶住,无非也就是分而治之了。之前都是直接使用FileReader、RandomAccessFile之类直接操作文件,分而治之好像也不太好发挥,看来之后不能偷懒了,NIO还是得了解一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值