图片内容源自B站黑马Java基础公开课
内存分析:同一个类实例化的两个不同对象使用同一个方法。给定手机类的实例化流程代码,分析两个手机对象在执行相同方法时的内存中流动过程
一、绘制内存结构图
二、类加载
将所有类字节码(.class文件)加载到方法区中
三、实例化one对象
在栈内存中为 main 方法开辟栈帧。进而实例化第一个 Phone 对象,在 main 方法栈帧中定义一个名为 one 的 Phone 类型变量,用于保存该对象在堆内存中的地址值
四、操作one对象
访问和修改变量 one 指向/引用的 Phone 对象中的成员变量;执行对象的类方法,方法执行结束后,对应的方法栈帧弹栈
五、实例化two对象
实例化第二个 Phone 对象,此时方法区中已经加载了 Phone 类,因此JVM不会做重复加载。在 main 方法栈帧中定义一个名为 two 的 Phone 类型变量,用于保存该对象在堆内存中的地址值。可见,相同引用类型的对象中,成员方法将指向/引用方法区中相同的地址
六、操作two对象
访问和修改变量 two 指向/引用的 Phone 对象中的成员变量;执行对象的类方法,方法执行结束后,对应的方法栈帧弹栈
七、总结
从内存图中不难发现,同一个类实例化的两个对象之间相互独立,互不影响。