Java JVM学习-方法区
方法区是什么的?
它用于存储已被虚拟机加载的类型信息(构造方法 / 接口定义)、常量、静态变量、即时编译器编译后的代码缓存等。

如下随便写个 HelloWorld
public class Temp {
public static void main(String[] args) throws InterruptedException {
System.out.println("Hello World");
TimeUnit.SECONDS.sleep(1000);
}
}
打开 VisualVM 可以发现就加载了 1620 个类

方法区(Method Area)与 Java堆一样, 是各个线程共享的内存区域。
方法区在 JVM启动的时候被创建,并且它的实际的物理内存空间中和 Java堆区一样都可以是不连续的。
方法区的大小,跟堆空间一样,可以选择固定大小或者可扩展。
方法区的大小决定了系统可以保存多少个类,如果系统定义了太多的类,导致方法区溢出,虚拟机同样会抛出内存溢出错误:java. lang.OutOfMemoryError: PermGen space(JDK8 前的永久代) 或者 java.lang.OutOfMemoryError: Metaspace
关闭 JVM就会释放这个区域的内存。
栈、堆、方法区的交互关系
