在执行main方法前,加载创建好的zuoye01001类里设置的参数、局部变量。
在虚拟机栈开辟main方法栈帧,执行main方法线程导入(zuoye01001)参数、局部变量 (args:null)。
//创建引用类型4字节。
1、创建zuoye01001 q=new zuoye01001();对象,此时q=null。
2、在在虚拟机栈开辟zuoye01001对象栈帧。(在执行完q=0x11时被删除)
3、堆里生成 q对象地址:0x11(name:null,age:0,fady:(在zuoye01001类里查找)),
0x11地址(赋值)给q。
4、main方法里执行( 字符串q.name=“许长”;int类型q.age=58;方法q.fady();)在对应的地址0x11里进行
赋值,其中字符串“许长”应需要到zuoye01001类(常量池)里查找并把地址赋值给q.name,
5、在在虚拟机栈开辟q.fady方法栈帧,默认传送参数this(隐式参数)0x11(q对象地址),方法内容
(System.out.println(“姓名:”+this.name+",年龄"+this.age);)。(执行打印完被删除)
1、创建zuoye01001 w=new zuoye01001();对象,此时w=null。
2、在在虚拟机栈开辟zuoye01001对象栈帧。(在执行完w=0x11时被删除)
堆里生成 w对象地址:0x12(name:null,age:0,fady:(在zuoye01001类里查找)),0x12地址(赋值)
给q。
3、main方法里执行( 字符串w.name=“林子”;int类型w.age=60;方法w.fady();)在对应的地址0x12里进
行赋值,其中字符串“林子”应需要到zuoye01001类(常量池)里查找并把地址赋值给w.name,
4、在在虚拟机栈开辟w.fady方法栈帧,默认传送参数this(隐式参数)0x12(w对象地址),方法内容
(System.out.println(“姓名:”+this.name+",年龄"+this.age);)。(执行打印完被删除)
当程序结束时堆里面的对象会被清理。
————————————————
版权声明:本文为CSDN博主「只要付出就有收获 °」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/BCSWKL/article/details/100068226
TestPerson类执行时的内存变化图
最新推荐文章于 2023-04-26 09:39:26 发布