一方法区的基本理解
1.方法区和堆一样是线程共享区域
2.在JVM虚拟机启动的时候被创建,和堆一样逻辑内存连续,物理内存不连续
3.方法区的大小和堆一样,可以固定大小也可以扩展
4.有OOM和GC
5.关闭JVM就会释放这个区域内存
二方法区概述
在JDK1.8之前叫永久代,JDK1.8以后叫元空间
永久代和元空间的区别:元空间不在虚拟机设置的内存中,而是使用本地内存
三方法区存储什么
它用于存储已被虚拟机加载的类型信息、运行时常量池、静态变量等
类型信息:1.这个类型的完整有效信息
2.这个类型的父类的完整有效名
3.这个类的修饰符
4.这个类型的直接接口的一个有序列表
常量池与运行时常量池:一个有效的字节码文件除了包含类的版本信息、字段、方法以及接口等描述信息外,还有就是常量池表,包括各种字面量和对类型率和方法的符号引用,运行时常量池每个类加载都会有一个,包括编译期就已经明确的数值字面量,也包括运行期解析后才能获得的方法或字段引用,此时不在是常量池中的符号地址,这里换成了正式地址,并且具备动态性。
四方法区中的垃圾回收
垃圾回收主要分为两部分:常量池中的废弃常量和不在使用的类型,只要常量池中的常量没有被任何地方引用,就可以被回收