设置StringBuffer初始容量为1000,5000,10000,按行读取大文件并append到StringBuffer中,都正常
但当设置为3,6,9以及300,3000,6000,9000时,则导致“java.lang.OutOfMemoryError: Java heap space”

解决方案 »

  1.   

    读取的是16M的txt文件。
    读取方式
    BufferedReader  br = new BufferedReader(new FileReader("filePaht"));
      

  2.   


    发生了OutOfMemoryError,
      有三种可能导致OutOfMemoryError。首先是,此 JVM有真实的内存泄漏,导致此JVM堆在内部实现时产生了一个Bug  第二种可能的OutOfMemoryError原 因只不过是,你没有为你的应用程序运行时给予足够多的可用内存。这种情况,有两种可能的方案,或者增加JVM堆可用大小,或者减少你的应用程序所需的内存 总量。提高JVM可用堆大小可以简单的使用JVM的 -Xmx 参数。假如你将此参数设置尽可能的大(可用内存极限不要超过系统物理内存,否则你的应用程 序将分页并暂停),仍然有以上所提到的内存问题,那么,你需要减少你的应用程序所可能用到内存总量。减少应用程序内存可能是简单的,你可能允许一些集合过 大,例如使用了许多大的缓冲区。或者它过于复杂,要求你重新实现一些类,乃至重新设计应用程序。  读者 Jams Stauffer  指出有些JVM(例如 sun的 JVMs),还有一个“Perm”参数用来处理JVM结构与类对象。如果你正在使用一个数量非常巨大的类集,它有可能运 行在"Perm"空间之外,然后你需要增加此空间的大小,例如,sun的JVM使用 -XX:PermSize 与 -XX:MaxPermSize 选 项。  第三种导致OutOfMemoryError最为常见,无心的对象引用保持。你没有明确无误的释放对象,以致于你的堆增长再增长,直到你没有额外的空间。
      

  3.   

    第四种 jvm分配内存过大而留给系统的内存太小 导致开启大量线程的时候失败
      

  4.   

    jvm分配内存过大而留给系统的内存太小 导致开启大量线程的时候失败
      

  5.   

    个人建议不要用StringBuffer保存大量的字符串 导致内存java.lang.OutOfMemoryError: Java heap space是必然的 
      

  6.   


    那用String来保存大容量字符串吗?
      

  7.   

    用String保存大容量字符串是显然不可取的