JVM的虚拟机栈,堆,方法区 分别存储什么

方法区:存储类的元数据、静态变量、常量池等与类相关的信息。
堆:存储所有对象实例和数组。
栈:存储方法调用的栈帧,包括局部变量、方法参数和返回值。

public class MemoryExample {
// 静态变量 - 存储在方法区
private static final String STATIC_CONSTANT = "静态常量";
private static int staticVariable = 10;

// 实例变量 - 存储在堆中
private String instanceVariable;

// 构造函数
public MemoryExample(String value) {
    this.instanceVariable = value;
}

// 静态方法 - 方法定义在方法区
public static void staticMethod() {
    // 局部变量 - 存储在栈帧中
    int localVar = 20;
    System.out.println("静态方法中的局部变量: " + localVar);
    
    // 引用类型的局部变量 - 引用存储在栈帧中,对象存储在堆中
    MemoryExample example = new MemoryExample("栈中引用");
    System.out.println("实例变量值: " + example.instanceVariable);
}

// 实例方法 - 方法定义在方法区
public void instanceMethod() {
    // 局部变量 - 存储在栈帧中
    int localVar = 30;
    System.out.println("实例方法中的局部变量: " + localVar);
    
    // 字符串常量 - 存储在方法区的运行时常量池中
    String strConstant = "字符串常量";
    
    // 引用类型的局部变量 - 引用存储在栈帧中,对象存储在堆中
    StringBuilder sb = new StringBuilder();
    sb.append("动态创建的对象");
    System.out.println("StringBuilder内容: " + sb.toString());
}

public static void main(String[] args) {
    // 调用静态方法
    staticMethod();
    
    // 创建实例 - 对象存储在堆中
    MemoryExample obj = new MemoryExample("堆中的对象");
    
    // 调用实例方法
    obj.instanceMethod();
    
    // 访问静态变量
    System.out.println("静态变量: " + staticVariable);
}

}

posted @ 2025-06-10 16:30  认真的刻刀  阅读(54)  评论(0)    收藏  举报