java.lang.OutOfMemoryError: PermGen space有效解决方法

本文是转载文章,文章的来源:博客园
博主:侯爵吖
文章:java.lang.OutOfMemoryError: PermGen space有效解决方法
博文地址:https://www.cnblogs.com/learnapi/archive/2017/10/09/7641591.html

 

 PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。说说为什么会内存益出:这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。

 

解决方法

   一、手动设置MaxPermSize大小修改TOMCAT_HOME/bin/catalina.bat(windows系统)或者catalina.sh(unix系统)

  1.windows系统  在 TOMCAT_HOME/bin/catalina.bat 文件 echo Using CATALINA_BASE:   "%CATALINA_BASE%"上面加入以下行:set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=256M -XX:MaxPermSize=512m

  2.unix系统 在 catalina.sh 文件 echo "Using CATALINA_BASE:   $CATALINA_BASE"上面或者第一行加入以下行:set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=256M -XX:MaxPermSize=512m

   或者加入 JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "

   

  二、如果启动Tomcat的时候是通过MyEclipse启动服务器的话,需要在MyEclipse里面同样设置内存大小

  原图上的文字:-Xms512m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256M  

  

 

  -Xms64m   -Xmx256m

  

  

 

1、修改eclipse.ini 
在Myeclipse安装目录下G:\MyEclipse8.5\Genuitec\MyEclipse 8.5有一个myeclipse.ini配置文件,设置如下: 
-vmargs
-Xmx512m
-XX:MaxPermSize=256m
-XX:ReservedCodeCacheSize=64m

2、设置Default VM Arguments 
在myEclipse中,打开Windows-> Preferences->Java->Installed JREs->点击正在使用的JDK->Edit->Default VM Arguments文本框中输入:-Xms64m   -Xmx256m 

3、如果是web工程还报内存溢出,可能就要设置tomcat内存。

(1)tomcat的安装根目录%tomcat%bin/catalina.bat文件,SET JAVA_OPTS 一行;

(2)myeclipse配置web服务器配置 Window—Preferences—Myeclipse—Servers—tomcat 5.x—JDK的Optional Java VM arguments配置为:

-Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m

 

4、如果是debug模式运行,需要调整debug的虚拟机参数,因为debug模式的默认内存分配时很少的。  

选择Arguments 在 VM arguments里面填写内存值如:-Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m

 

 

 

一般的ini文件设置主要包括以下几项:

-vmargs

-Xms40m

-Xmx256m

-XX:PermSize=64M

-XX:MaxPermSize=128M

以下解释其意思。

-vmargs:说明后面是VM的参数

-Xms40m:虚拟机占用系统的最小内存

-Xmx256m:虚拟机占用系统的最大内存

-XX:PermSize:最小堆大小。一般报内存不足时,都是说这个太小,

                       堆空间剩余小于5%就会警告,建议把这个稍微设

                               大一点,不过要视自己机器内存大小来设置

-XX:MaxPermSize:最大堆大小。这个也适当大些

     所以若出现问题,首先请调整 -Xms40m:将其设置的小一些,就ok了,1g内存推荐设置为:

-vmargs

-Xms128M

-Xmx512M

-XX:PermSize=256M

-XX:MaxPermSize=512M

其中-XX:PermSize=64M可以设置大一些,但不能超过MaxPermSize

-Xmx512M的5%为25.6M,理论上要求-Xmx的数值与-XX:MaxPermSize必须大于25.6M

你可能感兴趣的:(java编程环境配置+问题总结,内存溢出)