Java中程序执行时,内存变化图
举个例子
public class Program {
public static void main(String[] args) {
Person p1 = new Person();
p1.name = "二狗";
p1.age = 30;
p1.print();
}
}
创建一个类
public class Person {
String name;
int age;
public void print(){
System.out.println("name is " + this.name + " age is "+this.age);
}
}
先执行main()方法,给它在栈中开辟一个栈帧用于存储相关的局部变量、参数等,其中形参args也是。
第一步:
执行Person p1,然后执行new Person()在堆中创建一个Person的对象,
这时栈中也会创建一个关于Person的栈帧,创建好以后该栈帧释放,
这时p1指向它,name和age都还没有赋值,但是print()方法是放在方法区的,方法区是用来存放一些永久不变或唯一的内容。
第二步:
p1指向的name、age被赋值,然后执行print()方法。
最后程序结束所有空间被释放。