方法区(Method Area)是JVM内存结构的一部分,它用于存储类加载器、常量、静态变量、类信息(类名、访问修饰符、字段、方法)等数据。
方法区的作用是:
- 存储类加载器及定义在方法区的类型信息。
- 存储常量、静态变量等数据,这些数据在程序运行期间保持不变。
- 方法区用于存储共享数据,这些数据可以在程序运行期间被多个线程访问。
- 方法区的大小仅受本地内存限制,但是可以使用XX:MaxMetaspaceSize参数来限制最大大小。
来看一个简单示例:
public class MethodAreaDemo {
public static final int NUM = 10; // 常量在方法区
public static String str = "Hello"; // 静态变量在方法区
public static void main(String[] args) {
// 同一静态变量被多个线程访问
new Thread(()->{
str = "Hi";
System.out.println(str); // Hi
}).start();
new Thread(()->{
System.out.println(str); // Hi
}).start();
}
}
在该示例中:
- 常量NUM和静态变量str存储在方法区。
- 多个线程访问公共的静态变量str,其值在方法区共享。
- str在方法区的同一块内存被赋值和访问。
所以,方法区用于共享数据的存储和访问。理解方法区有助于我们更好的管理这部分内存,判断数据存储位置。