1、方法区溢出(Perm持久代溢出)

在jdk1.6及之前的版本中,常量池放在Perm区也即是方法区中,所以在jdk1.6版本中,常量池溢出可以说是方法区溢出。

示例一:

方法区溢出的示例见《JVM体系结构之七:持久代、元空间(Metaspace) Metaspace 之三--了解String类的intern()方法、常量池介绍、常量池从Perm-->Heap》

示例二:

在网络上看到一个cglib导致的方法区溢出的示例:借助CGLib使方法区出现内存溢出异常(在对类进行增强时,都会使用到CGLib这类字节码技术,增强的类越多,就需要越大的方法区来保证动态生成的Class可以加载入内存。另外,JVM上的动态语言(例如Groovy等)通常都会持续创建类来实现语言的动态性,随着这类语言的流行,也越来越容易遇到与下面代码相似的溢出场景)

pom.xml中增加cglib:

      <dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>3.2.6</version></dependency>

package com.dxz.jvm;import java.lang.reflect.Method;import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;/*** @VM args : -XX:PermSize=10M -XX:MaxPermSize=10M*/
public class MethodAreaOutOfMemory {public static void main(String[] args) {while (true) {Enhancer enhancer = new Enhancer();enhancer.setSuperclass(MethodAreaOutOfMemory.TestObject.class);enhancer.setUseCache(false);enhancer.setCallback(new MethodInterceptor() {public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable {return arg3.invokeSuper(arg0, arg2);}});enhancer.create();}}public static class TestObject {private double a = 34.53;private Integer b = 9999999;}
}

运行结果:

  1. Caused by: java.lang.OutOfMemoryError: PermGen space
  2. at java.lang.ClassLoader.defineClass1(Native Method)
  3. at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
  4. at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
  5. ... 8 more

方法区溢出也是一种常见的内存溢出异常,一个类要被垃圾收集器回收掉,判定条件是比较苛刻的。在经常动态生成大量Class的应用中,需要特别注意类的回收状况。这类场景除了上面提到的程序使用了CGLib字节码增强和动态语言之外,常见的还有:大量JSP或动态产生JSP文件的应用(JSP第一次运行时需要编译为Java类)、基于OSGi的应用(即使是同一个类文件,被不同的加载器加载也会视为不同的类)等。

二、常量池导致的堆溢出

在jdk1.7以后,perm持久代已经被移除,常量池也放到了堆中,其导致的溢出也变成了堆溢出。

示例见《JVM体系结构之七:持久代、元空间(Metaspace) Metaspace 之三--了解String类的intern()方法、常量池介绍、常量池从Perm-->Heap》

三、jdk1.8后,方法区被移除了

见《JVM体系结构之三:方法区之2(jdk1.6,jdk1.7,jdk1.8下的方法区变迁)》

上面示例2在jdk8中运行,由于方法区被移除了,那么通过反射生成的一系列对象存放到哪儿了?可看到jvisualVM中的元空间不断增长。

转载于:https://www.cnblogs.com/duanxz/p/8522431.html

JVM异常之:方法区溢出OutOfMemoryError: PermGen space相关推荐

  1. myEclipse开发内存溢出解决办法myEclipse调整jvm内存大小java.lang.OutOfMemoryError: PermGen space及其解决方法...

    摘要: tomcat部署多个项目后,启动tomcat正常,访问项目时却会出现该错误 在网上查了查又试了好几次,才解决,将解决方法记录下来,以方便以后查看或让遇到同样问题的朋友有个参考 PermGen ...

  2. 内存溢出数值jvm 内存溢出 在myeclipse中加大tomcat的jvm内存 java.lang.OutOfMemoryError: PermGen space...

    废话就不多说了,开始... 每日一道理 站在历史的海岸漫溯那一道道历史沟渠:楚大夫沉吟泽畔,九死不悔:魏武帝扬鞭东指,壮心不已:陶渊明悠然南山,饮酒采菊--他们选择了永恒,纵然谄媚诬蔑视听,也不随其流 ...

  3. java.lang.OutOfMemoryError: PermGen space基于idea,MyEclipse或tomcat的详细解决方法以及详解JVM配置参数

    文章目录 1. 引出问题 2. 分析问题 3. 解决问题 3.1 手动设置tomcat的MaxPermSize大小 3.2 基于MyEclipse的修改 3.3 基于idea的修改 4. jvm配置参 ...

  4. JVM(5)_方法区和大厂面试题

    文章目录 1. 堆.栈.方法区的交互关系 2. 方法区的理解 3.设置方法区大小与OOM 3.1 方法区大小 3.2 方法区OOM 4.方法区的内部结构 4.1 方法区中存储的信息 4.2 运行时常量 ...

  5. 元空间不足java.lang.OutOfMemoryError: PermGen space 错误的原因及解决方法

    出现 java.lang.OutOfMemoryError: PermGen space 错误的原因及解决方法 原因:堆内存的永久保存区内存分配不足(缺省默认为64M),导致内存溢出错误. 解决的方案 ...

  6. java.lang.OutOfMemoryError: PermGen space及其解决方法

    PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决 ...

  7. java perm space_java.lang.OutOfMemoryError: PermGen space及其解决方法

    PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决 ...

  8. JRebel : java.lang.OutOfMemoryError: PermGen space 异常

    软件环境 开发工具:IDEA 2018.3 Tomcat:8.5.39 JDK:1.7.0_80 JReBel:2018.2.7 异常描述 使用Tomcat直接运行/调试可以,但是通过JReBel运行 ...

  9. IntelliJ IDEA的Maven项目在修改时报java.lang.OutOfMemoryError: PermGen space异常

    IntelliJ IDEA的Maven项目在修改时报java.lang.OutOfMemoryError: PermGen space异常 参考文章: (1)IntelliJ IDEA的Maven项目 ...

最新文章

  1. 云服务能力评估“国标”出炉,腾讯云TStack首批通过私有云“一级能力”认证
  2. 数据结构-Huffman树
  3. C++ 标准函数库 —— 文件的输入输出 (Input/Output with files)
  4. linux登录界面说明,Linux登录界面以及简单使用入门
  5. Appium 屏幕页面滑动(swipe函数实现)
  6. 【结巴分词】浅谈结巴分词算法原理
  7. 提高WordPress访问速度的十种方法
  8. oracle设计案例,Oracle课程设计案例精编
  9. shell笔记(C语言中文网)
  10. NC23053月月查华华的手机
  11. mysql中sql_mode的那些问题
  12. 2022考研李永乐330数学一/330数学二/330数学三pdf版(分解析册与试题册)
  13. 大学生旅游网页制作作业5页 西柏坡介绍网页成品源代码下载 河北红色旅游景点网页设计
  14. 解决 Sniffer Pro 4.7 sp5 安装中有关JRE的问题
  15. PhysX官方手册翻译(二)
  16. 只用一张图,就能让二次元老婆动起来,宛如3D:这全是为了科学啊
  17. 微信小程序项目实例——生活记账本
  18. JAVASCRIPT 正则表达式学习--基础与零宽断言(转自司徒正美)
  19. 共话轻应用时代App开发新模式 FinClip线上沙龙成功举办
  20. 2013年数学建模国赛D题(城市公共自行车系统运行状况)优秀论文.doc

热门文章

  1. Xcode 11 新建项目适配 iOS 13 以下设备
  2. mysql using filesort_Mysql执行计划中的Using filesort
  3. import pymysql 没有模块_小白详细的 python 模块的运用
  4. python中的面向对象编程讲解_Python中的面向对象编程详解(上)
  5. 3分钟搞定静态出接口
  6. 网工必备的存储知识详解
  7. vivo AI 计算平台的 ACK 混合云实践
  8. 云原生已来,只是分布不均
  9. 还不会用 K8s 集群控制器?那你会用冰箱吗?(多图详解)
  10. python npy文件_python实现npy格式文件转换为txt文件操作