首页 > 其他 > 详细

方法区(Method Area)基础知识

时间:2020-06-10 14:35:55      阅读:45      评论:0      收藏:0      [点我收藏+]

堆、栈、方法区堆关系

技术分享图片

 

 

概述

  • 方法区与堆区一样,是各个线程共享的内存区域

  • 方法区在JVM启动时就会被创建,并且它的实际的物理内存空间中和Java堆区一样都可以是不连续的

  • 方法区的大小,跟堆空间一样,可以选择固定大小或者可拓展

  • 方法区的大小决定了系统可以保存多少个类,如果系统定义了太多的类,导致方法区溢出,虚拟机同样会抛出内存溢出错误:java.lang.OutOfMemoryError:PermGen space 或者 java.lang,OutOfMemoryError:Metaspace,比如:关闭JVM就会释放这个区域的内存

    • 加载大量的第三方jar包

    • Tomcat部署的工程过多

    • 大量动态生成反射类

  • 在jdk7及以前,习惯上把方法区称为永久代,jdk8开始,使用元空间取代了永久代。元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代最大的区别在于:元空间不再虚拟机设置的内存中,而是使用本地内存

  • 本质上,方法区和永久代并不等价。仅是对hotSpot而言的。《java虚拟机规范》对如何实现方法区,不做统一要求。例如:BEA JRockit/IBM J9中不存在永久代的概念

  • 使用永久代,会导致Java程序更容易OOM(超过-XX:MaxPermSize上限)

技术分享图片

 

(Java7和Java8在方法区的实现)

 

 

 

方法区(Method Area)基础知识

原文:https://www.cnblogs.com/ding-dang/p/13084890.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!