首页 > 代码库 > java.lang.OutOfMemoryError: Java heap space

java.lang.OutOfMemoryError: Java heap space

一:起因

(1)学习IT的人,不论是写前端还是后台;有时候需要对数据进行清洗处理,例如,数据库日志分析。

(2)处理数据的大小由MB 到 GB,在到TB,最后导致处理的每一个文件都超过java jvm初始的heap

(3)对于单个文件比较小的,并行要求不高的数据,我们可以通过更改JVM的初始参数进行解决 —— 但是这并不是根本的解决办法。

(4)根本的解决办法是hadoop分布式系统下的MapReduce

二:下面是针对(3)的处理办法

(1)引起java.lang.OutOfMemoryError: Java heap space异常,可能是由JAVA的堆栈设置太小的原因

a:   若Eclipse 报 “Exception in thread "main" java.lang.OutOfMemoryError: Java heap space ”错误,可通过一下方法进行处理:首先, 打开Eclipse软件,选择菜单栏run,在二级菜单中选择 Debug Configurations,然后:在弹出的窗口中选择(x)=arguments选项卡,VM arguments中输入所需要的内存最大占用量,比如输入-Xmx800m即可。

b:  myeclipse中console输出控制台,输出限定大小,可通过windows—Run/Debug—Console中的Console buffer size大小进行修改,这样可以使得console的空间变成size大小。
将java处理过的内容输出到一文本文件中,使用换行,不是"\n",而是"\r\n‘(但是我用的“\n”貌似也没有事情的)

c:  【附】MyEclipse的设置地址在run--->Open Run Dialog--->Arguments

(2)在D:/apache-tomcat-6.0.18/bin/catalina.bat最前面加入:set JAVA_OPTS=-Xms384m -Xmx384m

注意:只有startup.bat启动tomcat,设置才能生效,如果利用windows的系统服务启动tomcat服务,上面的设置就不生效了, 
就是说set JAVA_OPTS=-Xms384m -Xmx384m没起作用  

因为eclipse里默认的一个程序的jvm配置为:-Xms8m -Xmx128m,所以我们的处理耗内存比较大时需要手动调整一下,以便不会内存溢出。具体的设置方法为:  
  选中被运行的类,点击菜单‘run->run...’,选择(x)=Argument标签页下的vm arguments框里输入 -Xmx512m, 保存运行就ok了  
  在你的TOMCAT->右击->OPEN->在SERVER OVERVIEW 中General 中 Open launch configurtion 单击—>选择Argument 把默认设置去掉,在VM argument 中加一句话 :  
   -Xms256M -Xmx1024M -XX:PermSize=64M -XX:MaxPermSize=128M        

(3)在Eclilpse中修改启动参数,在VM arguments 加入了-Xms128m -Xmx512m,设置如下图所示(这是针对所有的工程进行的配置,即对本eclipse下的JDK进行的配置) windows --》 preferences  --》 JDK


问题解决。

下面的是针对某一个工程进行的配置  右击工程 --》 runconfig  --》 Arguments,仅仅针对这一个工程。



java.lang.OutOfMemoryError: Java heap space