1.方法区
- 一块独立于java堆得内存空间
- 和java堆一样线程共享、可以固定可以扩展内存大小
- 方法区的大小决定了系统可以保存多少个类,如果类太多,也会OOM
- 关闭JVM就会释放这个区域的内存
- jdK1.8以后废除了永久代,改用元空间代替
- 元空间和永久代类似,最大区别在于元空间在本地内存不是虚拟机内存
2.方法区内部结构
- 存储已被虚拟机加载的类型信息(类的完整有效名字包名+类名,直接父类的完整名字、类的修饰符、直接接口的序列表)、常量、静态变量、即时编译的后的代码缓存等
3.运行时常量池
- 方法区的一部分
- 类加载时创建,用于存放编译期生产的各种字面量和符号引用
4.方法区的垃圾回收
- 常量池废弃的常量和不在使用的类型