Appearance
方法区用来存储类结构信息,存储已加载的类的信息,如类的字段、方法、常量、静态变量、运行时常量池等。它是线程共享的,即所有线程共享同一方法区,方法区在启动虚拟机时被创建,并且它与堆一样,是被连续分配的内存空间。
方法区的大小可以通过虚拟机参数进行调整。在早期的JVM版本中,方法区内存是固定的,但在Java 8之后,方法区内存被移到了元数据区称为元空间(Metaspace)。
方法区的组成部分
- 类的元数据:包括类的全限定名、父类的全限定名、接口的全限定名、字段的信息(名称、类型、修饰符等)、方法的信息(名称、签名、修饰符等)等。
- 运行时常量池:用于存放编译期生成的各种字面量与符号引用,包括字符串常量、类与接口的全限定名、字段和方法的名称与描述符等。
- 静态变量:存储被声明为static的变量。
- 常量:包括final修饰的静态常量及特定场景下的字面量常量。