创建对象内存分析

本文通过代码示例解析了Java内存的运行过程,包括类信息加载、栈帧创建、对象的四步创建以及内存中的数据存储。重点讨论了方法区、栈和堆的作用,以及对象创建时的初始化和构造方法执行。同时提到了字符串常量池和栈的先进后出,后进先出原则。

就以这段代码我们通过画图进行模拟内存的运行过程吧 

首先第一步,我们先加载类信息,类信息是在方法区里边执行的,而每一个类信息都有字符串常量池,静态属性和方法区,至于为什么还有方法的代码就是因为每次创建一个对象如果对复制一份study()代码,kickball()代码,Student()代码这样子就过于浪费空间了:

第二步,执行main(),只要执行方法都会在栈里边创建栈帧,并且遵循栈的

"先进后出,后进先出"的原则

 

 第三步创建对象,创建对象又可以分成四步

1、在堆中创建对象然后并将对象成员变量默认赋0或空值

2、执行属性的初始化,就是看在类中创建属性的时候是否有赋初值,如果有的话在这一步进行,而我们没有,就直接跳过

3、运行构造方法而只要执行方法都要在栈中创建栈帧,而每一个方法在创建的时候都会有一个隐式参数this:地址,谁调用的这个方法那么this就等于它的地址,我这里是0x11在创建对象时自动运行构造方法,所以0x11的隐式参数this = 0x11

然后当这个方法执行完后会将这个方法释放

 

4、返回这个对象的地址给变量

 ​​​​​​​

 执行完后开始往下执行,s.id = 1 等于 0x11.id = 1,s.age = 16 等于 0x11.age = 16,

s.name  = "咸蛋侠" 等于  0x11.name = "咸蛋侠",但是字符串都放在了字符串常量池中,所以name指向字符串常量池中的"咸蛋侠"

 然后就是以此类推,创建study()栈帧,kickball()栈帧

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值