- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
OutOfMemoryPermGen Space异常的处理和分析
OutOfMemory:PermGen Space异常的处理和分析
2007年08月19日 星期日 09:58
自从用了resin之后,一直困扰我的一个问题就是OutOfMemory,时不时会出现PermGen OutOfMemory,今天在休息的时候,无意中看到这篇文章,给了我很大的启发,特地保存下来,以便日后查看,原文如下:
可见在Java的世界中,太多的不确定因素导致Java运行程序直接崩溃,直接抛出OutOfMemory异常,而一旦遇到了这个问题,调查起来就非常的困难。在JDK 5.0以前,OutOfMemory只有这么一句话: java.lang.OutOfMemory Exception…基本上无从下手,无从分析。从JDK 5.0以后对OutOfMemory增加了许多的详细说明,为这个异常的分析提供了很大的便利。
这次遇到的问题就是会抛出OutOfMemory:PermGen Space的异常,这个异常非常有意思,根据【此文章】的描述,这是一个Sun JVM的bug,从2003年开始,一只到现在都没有解决。而且提出来的解决方案是使用JRockit。Bug产生的原因已经找到,就是因为JVM在分配PermGen Space的时候出现了PermGen Space不足的情况,默认情况下 PermGen的大小为64M,在不换用JRockit的情况下,可以在启动JVM的时候添加一个参数: -XX: MaxPermSize= 128m| 256m| 512m。
那么究竟什么是PermGen呢?
PermGen 原来是指Permanent Generation,本身是在Java的垃圾收集机制(GC)中产生的一个概念。Java的垃圾收集机制最早只是遍历所有的对象,如果发现某个对象没有被引用,则回收,这是在早期的Java 1.0和Java 1.1的时候的GC规则。慢慢的,这样一种“愚蠢的”GC算法成为了JVM性能的瓶颈,在拥有大量数据的Java应用程序中,GC的算法被高度强化,于是各种各样高效的JVM GC算法被发展了起来。从J2SE也就是Java 1.2开始,JVM引入了多种GC算法,其中一种用的非常多的就是Generational Collection,中文也叫做“分代收集法”。
分代收集法摈弃了对所有对象的遍历,而是采用一些经验属性去避免额外的工作(While naive garbage collection examines every live object in the heap, generational collection exploits several empirically observed properties of most applications to avoid extra work)。其中导入了一个非常关键的概念:infant mortality (幼儿死亡率),这表示越是新生成的变量或者对象,越容易被收集。下面一张图表示了对象的生命周期,横轴表示的是测试到对象的生命周期,纵轴表示在一个指定的生命周期上被回收的对象数量。
可以看到,在使用了分代收集法以后,年轻一代的对象被收集的比例最高。并且在内存中的对象会按照不同的“年龄”来划分,当一个年龄段的对象满了以后,在这个年龄段上就会发生垃圾收集,从最年轻的一代开始,一直到“永生代”,在内存中,所有的对象可以划分为很多代,最后的一代“永生代”就是“Permanent Generation”,这里就是直接引出“Permanent Generation”概念的地方。具体可以参考下图:
根据前面所说的情况,在分代垃圾收集的情况下会产生Permanent Generation的概念,而这个分代垃圾收集法是并行收集和并发收集的基础,所以Permanent Generation会一直存在,那么这个Permanent Generation究竟是做什么用的呢?这里保存了JVM中所有对象的类信息,包括类的元数据,还有方法描述等等,所以这一代内存垃圾收集算法是不一样的,在Java大程序的情况下,尤其是J2EE 或者说Java EE的大型应用程序上,Permanent Generation的大小会直接限定能载入类的数量和大小。
【解决办法】就是设定JVM启动的时候参数,可以如下设置:
java -XX: PermSize=64m -XX: MaxPermSize=128m
另外PermSize 和MaxPermSize如果设置为相同还可以在一定程度上提高性能,因为,PermSize在不断的变化中会需要转移其中的数据。如果固定了以后,则可以减少每次扩大PermSize带来的性能损失。
更多的请参考 【Java官方站点】
另外,还可以在Java启动的时候添加下面的参数来看GC的运行
您可能关注的文档
- MOSHIV量表简体中文版的翻译修订及信度的效度评价.pdf
- Movement Control Methods for Complex, Dynamically Simulated Agents Adonis Dances the Macare.pdf
- Mo在c中的使用.doc
- Mplayer做界面并实现基本的暂停播放功能.doc
- MPLS与IP组网模式的演变_续_.pdf
- MPLS业务量工程中负载均衡算法的研究.pdf
- MPLS交换路由器的设计与实现.pdf
- MPLS域中TRACEROUTE分析.doc
- MPLS技术的应用与发展(图).doc
- MPLS环境下Untagged及Aggregate标签操作的区别.docx
- Output Process Analysis of the Peak Cell Rate Monitor Algorithm.pdf
- OverlayLayout(重叠)布局管理器专题..pdf
- OVATION系统常用操作方法.doc
- P. Economic incentive patterns and their application to ad hoc networks.pdf
- P. Searching similar (sub)sentences for examplebased machine translation. In Proc. Atti de.pdf
- OWL本体建模中约束公理的应用.pdf
- PacketTracer软件使用教程深入详解.doc
- PADS Logic与ORcad原理图的互转方法.pdf
- PADS LOGIC 导出BOM 简明教程.pdf
- pads 应用技巧,帮你快速提升你的画图能力.doc
最近下载
- 新版PFMEA第五版实例.xls VIP
- 东华理工大学数学分析考研真题试题2016年—2018年.pdf VIP
- 校长在2025年秋季新学期教学工作会议上的讲话_:把功夫下在课堂里,把心思放在学生上,把质量落到细节中.docx
- 机械伤害事故专项应急预案及现场处置方案.pdf VIP
- 碧桂园精装修专家班培训之项目总如何做好精装管理.pdf VIP
- 商用厨房间净水工程方案(3篇).docx VIP
- 2025福建福州闽侯县精神病医院招聘一类编外专业技术人员43人笔试备考试题及答案解析.docx VIP
- 平安意外(B款)医疗保险条款.pdf VIP
- 东华理工大学数学分析2018年考研真题试题.pdf VIP
- 2025福建福州闽侯县精神病医院招聘一类编外专业技术人员43人笔试备考题库及答案解析.docx VIP
文档评论(0)