本文中简单的将Java虚拟机的内存分为三个区域:虚拟机栈(Virtal Machine Stack)、堆(Heap)、方法区(Method Area)。
以一下类为基础绘制内存变化图:
class Person {
String name;
int age;
public void show(){
System.out.println("姓名:"+name+",年龄:"+age);
}
}
public class TestPerson {
public static void main(String[ ] args) {
// 创建p1对象
Person p1 = new Person();
p1.age = 24;
p1.name = "张三";
p1.show();
// 创建p2对象
Person p2 = new Person();
p2.age = 35;
p2.name = "李四";
p2.show();
}
}
- 执行main方法创建main方法的栈帧

- 创建p1对象
创建局部变量p1

执行Person 构造方法,将对象的内存地址赋值给变量p1


Person 构造方法执行完成----->出栈

- 修改对象属性

- 执行"p1.show()"(打印“姓名:张三,年龄:24”),默认传入隐式参数“this”,this代表当前的对象

"p1.show()"执行完成后 -----> p1.show()栈帧出栈

6.创建p2对象(与p1步骤相同),修改属性值:
首先创建局部变量p1,然后 执行Person 构造方法,创建对象,将对象的内存地址赋值给变量p2;修改该对象属性值;Person栈帧出栈。

- 执行"p2.show()" —>打印“姓名:李四,年龄:35”

p2.show()栈帧出栈

- “p2.show()”执行完成后main()方法也就执行完成,这意味着整个程序都执行完成了(全部清空)。
