background image

 

这个问题主要还是由这个问题 java.lang.OutOfMemoryError: Java heap space 引起的。第一次
出现这样的的问题以后,引发了其他的问题。在网上一查可能是 JAVA 的堆栈设置太小的
原因。
跟据网上的答案大致有这两种解决方法:
1、设置环境变量
set JAVA_OPTS= -Xms32m -Xmx512m
可以根据自己机器的内存进行更改。

2、java -Xms32m -Xmx800m className
就是在执行 JAVA 类文件时加上这个参数,其中 className 是需要执行的确类名。(包括
包名)
这个解决问题了。而且执行的速度比没有设置的时候快很多。

如果在测试的时候可能会用 Eclispe 这时候就需要在 Eclipse ->run -arguments 中的 VM 
arguments 中输入-Xms32m -Xmx800m 这个参数就可以了。

后来在 Eclilpse 中修改了启动参数,在 VM arguments 加入了-Xms32m -Xmx800m,问题解
决。

一、java.lang.OutOfMemoryError: PermGen space 

PermGen space 的全称是 Permanent Generation space,是指内存的永久保存区域,
这 块 内 存 主 要 是 被 JVM 存 放 Class 和 Meta 信 息 的 ,Class 在 被 Loader 时 就 会 被 放 到
PermGen space 中,
它和存放类实例(Instance)的 Heap 区域不同,GC(Garbage Collection)不会在主程序运行期对
PermGen space 进 行 清 理 , 所 以 如 果 你 的 应 用 中 有 很 多 CLASS 的 话 , 就 很 可 能 出 现
PermGen space 错误,
这种错误常见在 web 服务器对 JSP 进行 pre compile 的时候。如果你的 WEB APP 下都用了
大量的第三方 jar, 其大小
超过了 jvm 默认的大小(4M)那么就会产生此错误信息了。

 

解决方法: 手动设置 MaxPermSize 大小

修改 TOMCAT_HOME/bin/catalina.sh

在 echo "Using CATALINA_BASE:   $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
建议:将相同的第三方 jar 文件移置到 tomcat/shared/lib 目录下,这样可以达到减少 jar 文
档重复占用内存的目的。

二、java.lang.OutOfMemoryError: Java heap space
Heap size 设置
JVM 堆的设置是指 java 程序运行过程中 JVM 可以调配使用的内存空间的设置.JVM 在启
动的时候会自动设置 Heap size 的值,
其初始空间(即-Xms)是物理内存的 1/64,最大空间(-Xmx)是物理内存的 1/4。可以利用
JVM 提供的-Xmn -Xms -Xmx 等选项可