JVM 内存分布详解
/*** 示例类,展示各种成员在JVM中的存储位置*/
public class MemoryDistributionExample {// 1. 实例变量(普通成员变量) - 存储在堆内存的对象实例中private int instanceVar = 10;private String instanceRef = "Instance Reference";// 2. 静态变量(类变量) - 存储在方法区/元空间private static int staticVar = 20;private static String staticRef = "Static Reference";// 3. 常量 - 存储在方法区/元空间的常量池public static final int CONSTANT_INT = 100;public static final String CONSTANT_STR = "CONSTANT_STRING";// 4. 实例方法 - 方法字节码存储在方法区/元空间public void instanceMethod() {// 5. 局部变量 - 存储在栈帧的局部变量表中int localVar = 30;String localRef = "Local Reference";System.out.println("实例方法执行");System.out.println("可以访问所有变量:");System.out.println("instanceVar: " + instanceVar);System.out.println("staticVar: " + staticVar);System.out.println("CONSTANT_INT: " + CONSTANT_INT);System.out.println("localVar: " + localVar);}// 6. 静态方法 - 方法字节码存储在方法区/元空间public static void staticMethod() {// 局部变量同样存储在栈帧中int localStaticVar = 40;System.out.println("静态方法执行");System.out.println("只能访问静态变量和常量:");System.out.println("staticVar: " + staticVar);System.out.println("CONSTANT_STR: " + CONSTANT_STR);// System.out.println(instanceVar); // 错误!不能访问实例变量}public static void main(String[] args) {// 创建对象实例MemoryDistributionExample obj = new MemoryDistributionExample();// 调用实例方法obj.instanceMethod();// 调用静态方法MemoryDistributionExample.staticMethod();// 访问常量System.out.println("直接访问常量: " + CONSTANT_INT);}
}