日期:2014-05-20  浏览次数:20761 次

java读取大文本文件溢出
我需要用java读取一个360M的txt文件到内存然后进行处理,必须全部读入,不能一部分一部分读入,已经设置了参数-Xmx1024m,给了1G的内存读360M的文件还是会溢出,不过是读取了百分之80之后溢出的。不知道各位知不知道这是什么原因,我觉得这1G内存eclipse应该没有完全利用,而且我将参数设置为Xmx1200m后并没有多读取任何一条数据。

------解决方案--------------------
你设置-Xmx1024m是设置的java堆内存的大小,但是堆内存也分为很多块,你的用意是要缓存在内存当中,那么很明显这些对象都将会进入老年代。一办JVM的新生代与老年代的比例差不多应该是8:3。当然这个参数不同的虚拟机有不同是的比例。而且jvm中肯定也会有其他的对象。你试着将JVM继续扩大吧。当然这个也只是我的看法而已。
------解决方案--------------------
设置的是eclipse的内存还是run configration那里设置的内存?
------解决方案--------------------
引用:
你设置-Xmx1024m是设置的java堆内存的大小,但是堆内存也分为很多块,你的用意是要缓存在内存当中,那么很明显这些对象都将会进入老年代。一办JVM的新生代与老年代的比例差不多应该是8:3。当然这个参数不同的虚拟机有不同是的比例。而且jvm中肯定也会有其他的对象。你试着将JVM继续扩大吧。当然这个也只是我的看法而已。


说实话,没看懂。。。
------解决方案--------------------
-Xms1024 保证启动后heap超过1024
并且你还不能用sun的jdk sun的jvm会heap分带的(要么你把eden区设置的大于350M)

你一定要读入300M这种做法需求上已经不对了...
这种处理要么用64位jdk 要么用c来完成

------解决方案--------------------
最佳办法 是用缓存多次读取。 我有解决办法。 500M文件读取测试通过了。

地址:
http://download.csdn.net/detail/yjflinchong/4093746  java一次性查询处理几百万数据解决方法