java读取大文件时内存溢出问题
1、JVM的Heap区可以通过-X参数来设定。\x0d\x0a 当一个URL被访问时,内存申请过程如下:\x0d\x0aA. JVM会试图为相关Java对象在Eden中初始化一块内存区域\x0d\x0aB. 当Eden空间足够时,内存申请结束。
2、resultSet读取的时候是以流的方式读取的,每.next异常,读取一定的数据。所有是不会内存溢出的。
3、JVM内存设置小了 或者一次性读的数据过大 例如list vertor 内存溢出类型java.lang.OutOfMemoryError: PermGen spaceJVM管理两种类型的内存,堆和非堆。
4、我有一个csv文件,大约有80多万条记录,用下面的代码读取时,一般读到70多万条记录时就出现内存溢出问题。
5、Java中的内存溢出大都是因为栈中的变量太多了。其实内存有的是。建议不用的尽量设成null以便回收,多用局部变量,少用成员变量。1),变量所包含的对象体积较大,占用内存较多。2),变量所包含的对象生命周期较长。
JAVA怎么快速读取一个大文件(1G多有500万行)
java NIO除了异步非阻塞特性外,另外一个重要特性就是文件读取,原理是文件地址直接映射在线程内存,不要经过操作系统,可以大大提高响应速度。
对文件建立 java.io.BufferedInputStream ,每次调用 read() 方法时会接连取出文件中长度为 arraySize 的数据到array 中。
该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。通常,如果此类中的所有读取例程在读取所需数量的字节之前已到达文件末尾,则抛出 EOFException(是一种 IOException)。
扫描一遍,生成这500MB的长度文件,比如有10万行,这个big.idx文件就有800KB左右。
我目前也遇到了,同样的问题,在windows下十M这样就溢出了,在linux下目前测试能支持到几十M,但是更大的会怎样呢…如果服务器系统是windows的话就不那么郁闷了,直接用jacob组件就不存在溢出的问题了。
优化的话要看你需求呀,你动不动就读完所有文本肯定慢啊,或者你可以把文本的名字起的有规律一点,然后索引打开咯。
java中如何读写大于4G的文件
1、首先获得一个文件句柄。File file = new File(); file即为文件句柄。两人之间连通电话网络了。接下来可以开始打电话了。通过这条线路读取甲方的信息:new FileInputStream(file) 目前这个信息已经读进来内存当中了。
2、就用普通的fileinputstream就行吧,java里对文件的读写还是比较快的。不是这样的吧。。你可以设置下缓冲区的大小嘛,想设多大就设多大。
3、JVM可以调到那么大?如果和JAVA环境相关,那就和代码无关了。
4、常规的面试中这个涉及到内存的使用,只能使用远远低于数据大小的内存去完成任务。如果是排序,需要分组,结果转储,然后归并。这里只要最长的一个,那就简单多了。