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);
}
}

浙公网安备 33010602011771号