蓬莱网站建设联系电话,软文写作要求,网站建设中最重要的是什么,wordpress文章喜欢#xff08;1#xff09;方法区 它是所有java虚拟机 线程共享的区#xff0c;存储着跟类的结构相关的信息#xff0c;类的成员变量#xff0c;方法数据#xff0c;成员方法#xff0c;构造器方法#xff0c;特殊方法#xff08;类的构造器#xff09;
方法区在虚拟机…1方法区 它是所有java虚拟机 线程共享的区存储着跟类的结构相关的信息类的成员变量方法数据成员方法构造器方法特殊方法类的构造器
方法区在虚拟机启动时被创建方法区逻辑上是堆的组成部分但是不同的JVM厂商实现是不一样的Oracle的HotSport虚拟机在jdk8以前方法区的实现叫做永久代这个永久代就是使用了堆的一部分最为方法区1.8以后呢把永久代移出了换了一个实现叫做 元空间元空间呢就不是用的堆的内存它用的是本地内存操作系统的内存 方法区内存发现内存不足了也会让虚拟机抛出内存溢出 HotSport虚拟机结构图1.6使用堆的一部分作为元空间1.8使用本地系统作为元空间 2方法区_内存溢出1
方法区存储类的数据类没有多少怎么会导致内存溢出呢 1.8方法区的实现换成了元空间的实现它默认情况下使用的是系统内存没有设置它的上限所以运行这个代码不会出现方法区的内存溢出 需要加一个虚拟机参数把最大的元空间大小设置小一些这样才能看出云空间内存溢出的问题 演示jdk1.6的1.6的方法区的实现方法区叫做永久代 设置一下永久代的大小 3方法区_内存溢出2 在实际过程中我们动态产生class并加载这些类的场景是非常多的 Spring和mybatis都会用到cgllib
spring用cglib来生成一写代理类代理类是spring AOP的核心mybatis也用到cglib用cglib产生mapper接口的实现类
cglib的底层是
ClassWritert继承ClassVisitor它是asm包中提供的类完成动态生成类的字节码 它里面也有这个类 所以我们用Spring和mybatis的时候经常会产生大量的在运行期间生成的类容易产生永久代的内存溢出的1.8以后呢使用元空间相对充裕很多并且垃圾回收机制也是由元空间自行管理了就不会像永久代一样垃圾回收效率很低经常由于垃圾回收效率低而导致内存溢出
遇到这种问题我们要看看是否是框架使用的不合理产生太多的类导致的内存溢出