- 浏览: 52204 次
- 性别:
- 来自: 厦门
文章分类
最新评论
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)那么就会产生此错误信息了。
解决方法: .其实不仅仅是时间长了会出现这样的问题,在开发过程中也会有。我们经常喜欢SSH组合来开发程序。当出现这样的问题时,总是归咎与 Tomcat,Spring,Hibernate。因为他们动态产生类,导致JVM中的permanent heap溢出 。然后解决方法众说纷纭,有人说升级 tomcat版本到最新甚至干脆不用tomcat。还有人怀疑spring的问题,在spring论坛上讨论很激烈,因为spring在AOP时使用 CBLIB会动态产生很多类。
1. 手动设置MaxPermSize大小
修改TOMCAT_HOME/bin/catalina.bat(Linux下为 catalina.sh),在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m
catalina.sh 下为:
JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m"
于是有人对更基础的JVM做了检查,发现了问题的关键。原来SUN 的JVM把内存分了不同的区,其中一个就是permenter区用来存放用得非常多的类和类描述。本来SUN设计的时候认为这个区域在JVM启动的时候就 固定了,但他没有想到现在动态会用得这么广泛。而且这个区域有特殊的垃圾收回机制,现在的问题是动态加载类到这个区域后,gc根本没办法回收!
java.lang.OutOfMemoryError: Java heap space
1.当java程序运行到一定时间的时候。常常抛出java.lang.OutOfMemoryError: Java heap space异常。 2.java heap space 指的是JVM的内存不够用了,内存泄露。 原因: 解决方法:
JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设 置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。
提 示:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。
提示:Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。
手动设置Heap size
修改TOMCAT_HOME/bin /catalina.bat,在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
set JAVA_OPTS=%JAVA_OPTS% -server -Xms800m -Xmx800m -XX:MaxNewSize=256m
或 修改catalina.sh
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="$JAVA_OPTS -server -Xms800m -Xmx800m -XX:MaxNewSize=256m"
发表评论
-
Java 设置http代理
2014-06-11 09:53 928一、设置系统代理 方法如下: java -Dhttp.p ... -
URLConnection的连接、超时、关闭用法总结(转载)
2014-06-10 15:46 1621Java中可以使用HttpURLConnection来请求 ... -
HttpURLConnection连接超时的设置
2014-06-10 15:39 1095HttpURLConnection连接超时的设置(设置超时时 ... -
java 多态认识
2014-05-15 11:08 0多态多态中用到了以 ... -
jquery的ajax和getJson跨域获取json数据
2014-03-18 10:20 360jquery的ajax和getJson跨域 ... -
hibernate hql 使用 in
2012-09-26 17:01 0public void updateDynamicMar ... -
java HttpUrlConnection
2012-05-31 16:09 954Java发送http请求 (get 与 post方法请求) ... -
读取配置文件
2012-03-26 10:41 001.package com; 02. 03.i ... -
tomcat 设置内存
2012-02-09 09:25 957关键字: tomcat outofmemoryerror pe ... -
xml
2011-07-28 09:19 648Dom4J讀寫xml http://ajava.org ... -
JSP 標籤字符串操作
2011-04-18 15:45 1536<%@ page language="j ... -
net/sf/cglib/proxy/CallbackFilter
2010-01-12 13:25 3968严重: Context initialization fail ... -
org/apache/commons/collections/SequencedHashMap
2010-01-12 12:55 3542严重: Context initialization fail ... -
javax/transaction/TransactionManager
2010-01-12 12:50 40202010-1-12 12:47:20 org.apache.c ... -
org.springframework.beans.BeanInstantiationException
2010-01-12 12:44 3885严重: Context initialization fail ... -
抽象类与接口的区别 - OO - New - JavaEye论坛
2009-12-28 12:42 689abstract class和interface是Java语言 ... -
struts2session与request的值问题
2009-12-27 13:47 1430ActionContext ServletActionCont ... -
java.lang.NoClassDefFoundError
2009-12-24 19:56 1005程序明明运行的好好的,可是今早启动Tomcat时出现java. ...
相关推荐
设置eclipse的运行内存, jvm内存大小设置, 如果启动服务时报内存溢出说明eclipse的运行内存太小 设置下运行内存就可以了
有效测量出 java 对象 内存 大小 可供缓存等计算
优化Java堆内存大小的五个技巧
java获得jvm内存大小
统计缓存大小(查看java对象所占的内存大小).
JAVA对象所占内存大小计算例子,博文地址:http://blog.csdn.net/u012787710/article/details/53164226
java计算机硬盘大小转换(B,KB,MB,GB,TB,PB之间的大小转换) java 硬盘大小转换 数据转换 内存转换 存储大小转换
测试java对象占用内存大小的例子,可以测试常用的类型
关于java内存的小常识,以helloworld程序为例。小白新学java,作为自己的笔记留存。可能有错误的地方还希望大佬们指出来。
在Java中,不能直接计算某个实例所占用的内存数,目前大多数计算内存占用采用的方法是在运行一段代码前记录内存情况,并在运行完毕后执行内存回收,再次计算内存情况,进行比较后,计算出内存的消耗。这种办法的缺点...
应当根据应用的线程所需内存大小进行调整。在相同物理内存下,减小这个 值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成, 经验值在3000~5000 左右。 -Xmn2g :设置堆内存年轻代...
struts2 上传 java 图片水印 改变图片大小
Java内存与垃圾回收调优,Java内存与垃圾回收的调优是一个重要的主题,特别是在高性能和大规模的应用程序中。以下是一些关键的调优建议和步骤: 理解内存结构: Java堆是主要的内存区域,用于存储对象实例。 堆内存...
java-sizeof-0.0.4:一个查看java对象占用内存大小
Java把内存划分成两种:一种是栈内存,一种是堆内存。 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过...
在使用Java程序从数据库中查询大量的数据或是应用服务器(如tomcat、jboss,weblogic)加载jar包时会出现java.lang.OutOfMemoryError异常。这主要是由于应用服务器的内存不足引起的。
java中的栈(深层了解java虚拟机对对象的内存分布)
此文章从5个方面讲解优化java堆: 1.JVM:对难以理解的东西产生恐惧感 2.数据和应用程序为王:回顾静态占用需求 3.业务流量设置规则:审查动态内存占用需求 4.量体裁衣 5.分而治之
一、引题 在java语言的所有数据类型中,String...如何设置各个区域的大小? 2、String类型在执行连接操作时,效率为什么会比StringBuffer或者StringBuilder低?StringBuffer和StringBuilder有什么联系和区别?