Java - 对象的内存分析(2)

图片内容源自B站黑马Java基础公开课

内存分析:同一个类实例化的两个不同对象使用同一个方法。给定手机类的实例化流程代码,分析两个手机对象在执行相同方法时的内存中流动过程

一、绘制内存结构图

在这里插入图片描述

二、类加载

将所有类字节码(.class文件)加载到方法区中
在这里插入图片描述

三、实例化one对象

在栈内存中为 main 方法开辟栈帧。进而实例化第一个 Phone 对象,在 main 方法栈帧中定义一个名为 one 的 Phone 类型变量,用于保存该对象在堆内存中的地址值
在这里插入图片描述

四、操作one对象

访问和修改变量 one 指向/引用的 Phone 对象中的成员变量;执行对象的类方法,方法执行结束后,对应的方法栈帧弹栈
在这里插入图片描述

五、实例化two对象

实例化第二个 Phone 对象,此时方法区中已经加载了 Phone 类,因此JVM不会做重复加载。在 main 方法栈帧中定义一个名为 two 的 Phone 类型变量,用于保存该对象在堆内存中的地址值。可见,相同引用类型的对象中,成员方法将指向/引用方法区中相同的地址
在这里插入图片描述

六、操作two对象

访问和修改变量 two 指向/引用的 Phone 对象中的成员变量;执行对象的类方法,方法执行结束后,对应的方法栈帧弹栈
在这里插入图片描述

七、总结

从内存图中不难发现,同一个类实例化的两个对象之间相互独立,互不影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值