什么是Java的方法区?它存储什么数据?代码举例讲解

方法区(Method Area)是JVM内存结构的一部分,用于存储类结构、常量、静态变量等数据。它对应于JVM规范中的Runtime Constant Pool。

方法区主要存储以下数据:

  1. 类的结构:包括字段描述、方法描述等。
  2. 常量池:存放编译期生成的各种字面量和符号引用。
  3. 静态变量:非静态类变量的初始化值。
  4. JIT编译后生成的代码:如接口方法等。
  5. 对象的类型信息:用于对象运行时的类型判断。

方法区与Java堆的区别是:

  1. 方法区存储的数据是共享的,堆存储的数据是每个对象私有的。
  2. 方法区存储的数据是存活时间比较长的,堆存储的数据存活时间较短。
  3. 方法区由JVM维护的,堆由程序员维护。
  4. 方法区空间是否足够是JVM要考虑的,堆空间是否足够由程序员决定。

来看一个简单例子:

public class MethodAreaDemo {
    public static void main(String[] args) {
        // 类的结构信息放入方法区
        MethodAreaDemo demo = new MethodAreaDemo();  

        // 常量放入方法区的常量池
        String s = "Hello"; 

        // 静态变量放入方法区
        static int count = 0; 
    }
}

可以看到,方法区存储了类的结构信息、常量池中的常量“Hello”,以及静态变量count。