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

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

一、绘制内存结构图

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

二、类加载

将所有类字节码(.class文件)加载到方法区中
Java - 对象的内存分析(2)

三、实例化one对象

在栈内存中为 main 方法开辟栈帧。进而实例化第一个 Phone 对象,在 main 方法栈帧中定义一个名为 one 的 Phone 类型变量,用于保存该对象在堆内存中的地址值
Java - 对象的内存分析(2)

四、操作one对象

访问和修改变量 one 指向/引用的 Phone 对象中的成员变量;执行对象的类方法,方法执行结束后,对应的方法栈帧弹栈
Java - 对象的内存分析(2)

五、实例化two对象

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

六、操作two对象

访问和修改变量 two 指向/引用的 Phone 对象中的成员变量;执行对象的类方法,方法执行结束后,对应的方法栈帧弹栈
Java - 对象的内存分析(2)

七、总结

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

相关文章: