1、堆栈方法区的关系
创建对象Person类(对象数据类型)放在方法区,对象实例数据放在堆中
方法区可以看做是独立于java堆的内存空间
2.2、 方法区的基本理解
(1)方法区和堆一样,是各个线程共享的内存区域
(2)方法区在JVM启动的时候就被创建,但实际物理地址和堆一样都是不连续的。
(3)方法区的大小,和堆空间一样,可以固定大小和扩展。
(4)方法区的大小决定了系统了可以保存多少个类,如果系统定义了太多的类,导致方法区溢出,虚拟机同样会抛出内存溢出错误。java.lang.OutOfMemoryError: PermGen space 或者java.lang.OutOfMemoryError: Metaspace 这个是JDK1.8的元空间
还有加载了过多的jar包,或者Tomcat部署了太多的工程,大量动态的生成反射类
(5)关闭JVM会释放这个区域的内存。
2.3、HotSpot中方法区的演进
在JDK7之前,习惯把方法区称为永久代,JDK8之后,称为元空间,但这么讲是在Hotspot中
在JDK8之后,彻底抛弃了永久代的说法,永久代和元空间的主要区别是,元空间不在虚拟机设置的内存中,而是在使用本地内存。如果无法满足新的内存分配需求的话,也会报OOM的错误。
3.1、设