JAVA 入门到入土

20Chapter 两个对象使用同一个方法的内存图 2020-0

2020-01-19  本文已影响0人  琴匣自鸣

两个独立对象使用同一个方法的内存图

下面说下流程
    1.执行程序时先加载class文件 Phone类加载进方法区

    2.执行main方法创建Phone对象,one内保存堆里的对象本体的地址,然后修改或者调用属性时,通过one保存的地址找到堆内的对象,再找到对应的属性通过属性内保存的地址找到该变量在堆内的值,注意引用类型属性才是保存地址,如果是基本数据类型例如:double直接保存值.

    3.调用方法时,还是通过地址找到对象,然后通过堆内的方法地址找到方法区方法,然后进行方法入栈,使用完后方法出栈

    4.one执行完成后,执行Two流程与2 3步骤一致,注意one调用方法结束后,在运行one期间的方法在栈内存中的空间已经出栈结束,Tow运行时就需要重新方法进栈

Notice: 一定注意,以上代码是两个不同的对象也就是说这俩是两个独立的个体,那么运行时两个对象之间实际没有任何关联都是独立运行互不影响

两个引用指向同一个对象的内存图
(也就是 Phone p1=new Phone();  Phone p2=p1;)

由于  one 和 two地址相同也就意味着指向的是同堆内的同一个对象,所以如图所示,改变的变量都是同一个,调用的方法也是通过堆内同一个对象的同一个方法引用找到方法区内的成员方法,然后调用,当然每次调用方法从开始到结束都会有一次方法的压栈 弹栈

上一篇下一篇

猜你喜欢

热点阅读