读取大文本文件导致内存不足异常错误的问题 将result声明成StringBuffer试试看了result += new String(content, m_encodeType);改成result.append(new String(content, m_encodeType)); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我试了一下JDK附带的Notepad示例程序,同样会有OutofMemoryException异常错误。因为文本内容可能是ANSI或是UNICODE等编码形式,所以不能逐个字节读入文件内容,只有借助JAVA对UNICODE的支持来实现。如果有其他的将文本内容读出并转为UNICODE编码的方法同样感谢。 刚才说错了,是 java.lang.OutOfMemoryError 错误。试了一下楼上的方法,仍然行不通。 你的内存多大?128么?用FileReaderBufferedReader dis = new BufferedReader(new FileReader(filename);每次读一行,读完进行过你要的处理以后立刻写到别的文件里面去。像你现在这种处理根本不是办法的。 我用过的方法:启动的时候设置JVM的可用内存,因为默认的大小才16M(好像是吧)可以用java -Mx256m 设成256M 请问bluesmile979要怎么改比较好?谢谢了 不管是物理内存还是虚拟内存,JVM启动时,默认只使用16M的内存,如果不够,就GC,若还不够,就只好Insufficient Memory Error了 我说的是改变JVM的可用内存,不是操作系统的虚拟内存大小 同时打开input流和output流,读一次写一次,这样你用的最大内存就是blockSize = 1024 * 1024了 JAVA默认只使用16M的内存?JAVA虚拟机有没有实现虚拟内存机制的?如果没有,岂不是对于需要分配大块内存的程序有很多限制,而且通过启动虚拟机时改变参数来实现也太令人不爽了吧。小弟刚从VC转到JAVA,肯请各位指教。 我觉得这个问题用NIO来解决比较好一些,NIO是非阻塞IO,效率要比传统IO要高一些,尤其是读写如此大的文件,但也是只能读出一点处理一点,不可能将文件全部加载到内存中。 SUN JVM默认分配堆的上限为16MB,所以在消耗了大约16MB内存后遇到了OutOfMemoryError。JVM 如何将系统内存用作它的堆。当运行 java.exe 时,您使用一定的选项来控制垃圾收集堆的起始大小和最大大小(分别用 -ms 和 -mx 表示)。Sun JDK 1.1.8 的默认起始设置为 1 MB,默认最大设置为 16 MB。IBM JDK 1.1.8 的默认最大设置为系统总物理内存大小的一半。这些内存设置对 JVM 在用尽内存时所执行的操作有直接影响。JVM 可能继续增大堆,而不等待一个垃圾收集周期的完成。 另外,我觉得你应该用两个Stream,一个Input,一个Output,而不是把文件统统读到内存里面。读完一部分,写一部分,这样内存里只保存文件的某个片断,而不是整个文件 看样子只能改变实现方式了。哪里有JAVA内存管理的资料?本以为用JAVA可以不用管内存分配问题,看样子还是得要搞明白才行 以java2为例,sun jvm默认堆上限为64m,只有超出-Xmx选项指定上限,jvm才会出现OutOfMemoryError。另外,jvm可使用虚拟内存。在企业级的开发中使用-Xmx对系统进行调优是很正常的。 如果我必须分配一块大于 -mx 和物理内存的大小时该怎么办呢?jvm -Xmx 可以指定超过物理内存大小的数字吗?比如windows下每个进程的可用地址空间大小 4GB还有一个问题,指定jvm -Xmx 只影响本程序还是影响当前机器上运行的所有JAVA程序? 当然可以分配超过物理内存大小的堆JVM是工作在OS之上的,OS管理物理内存和虚拟内存,对JVM来说,都是透明的。比如JVM需要200M,物理内存128M,那么OS会去使用虚拟内存,对JVM来说,它反正得到了200M 关于线程的基本问题 java如何接受命令行参数 java有没有读取文本文件里某一行的命令啊 TicTacToe游戏中可能出现的情况提问 数据库操作~大家怎么用的 怎样使用Method类的getMethod()方法和invoke()激活我的一个类静态方法呀? 加载图片的问题 adjustmentEvent的 getValue()方法Not Found...... 谁懂得如何发送NIKIA的VCARD,格式是什么 java 同步锁问题 帮忙解决一个swing的问题 Linux系统下Java运行环境的配置方法
因为文本内容可能是ANSI或是UNICODE等编码形式,所以不能逐个字节读入文件内容,只有借助JAVA对UNICODE的支持来实现。
如果有其他的将文本内容读出并转为UNICODE编码的方法同样感谢。
启动的时候设置JVM的可用内存,因为默认的大小才16M(好像是吧)
可以用java -Mx256m 设成256M
读完一部分,写一部分,这样内存里只保存文件的某个片断,而不是整个文件
哪里有JAVA内存管理的资料?本以为用JAVA可以不用管内存分配问题,看样子还是得要搞明白才行
另外,jvm可使用虚拟内存。在企业级的开发中使用-Xmx对系统进行调优是很正常的。
jvm -Xmx 可以指定超过物理内存大小的数字吗?比如windows下每个进程的可用地址空间大小 4GB还有一个问题,指定jvm -Xmx 只影响本程序还是影响当前机器上运行的所有JAVA程序?
JVM是工作在OS之上的,OS管理物理内存和虚拟内存,对JVM来说,都是透明的。
比如JVM需要200M,物理内存128M,那么OS会去使用虚拟内存,对JVM来说,它反正得到了200M