一个1G文件,jvm内存512M,求解,java怎么分析这个文件数据,例如统计 各个单词出现次数

你是错的我恒对 发布于 2013/11/18 21:01
阅读 2K+
收藏 1

一个1G文件,jvm内存512M,求解,java怎么分析这个文件数据,例如统计 各个单词出现次数


如题,求大神 指点

以下是问题补充:

@你是错的我恒对:风林火山 说的是关于 统计量太多 缓存的问题 (2013/11/21 08:47)
加载中
0
huan
huan
基础不过关,有谁读文件会吧整个文件放到内存中?你就用最原始的java文件操作也不会溢出的,放心吧。
huan
huan
回复 @edit : Java对文件的读操作基本都是建立一个byte数组的缓冲区,循环读数据到缓冲区里,处理完一部分后再取下一段。所以你占用的内存基本就是缓冲区的大小(这里暂不考虑其他内存开销),这个缓冲区一般是1M或者1K,你可以随意分配。这远远小于你的内存大小。
你是错的我恒对
你是错的我恒对
确实基础不好,现在理解点了,但是还没全理清,有木有好的 概念原理解释 关于io的啊
1
dollyn
dollyn
流本身也不是把文件内容全部一次加载到内存里。
1
风林火山
风林火山

呵呵,想了一下,感觉应该分三步,

第一.读取方式按行读取,读一行,分析一行,这样就不用纠结文件和内存大小的问题了

第二.单词在内存中的存储方式,考虑到极端情况,内存也会不够用,只用map也不行,需要在内存满的时候按照自己定的规则换出一些数据,我觉得用(lrucache)最近最少被使用cache就行,实现方式就是map+队列。

第三.就是当内存满时,换出的单词信息序列化到硬盘上,以单词名作为文件名比较合理,当该文件(单词)的访问权重超过队列尾的单词时,就可以将其