单个对象内存图
相关代码:
内存示意图:
首先知道有三个内存空间,分别是堆内存、栈内存、方法区。
1.有mian方法的类的字节码文件(.class)先进入方法区。
2.main方法调用进入栈内存。
3.首先声明Student类型的s变量进入栈内存。
因为引用Student类,此时把Student类的字节码文件也放入方法区,跟着放入的有成员变量、成员方法
4.此时new Student创建一个Student类的实例对象,在堆内存中开辟空间,并根据方法区的Student类的字节码文件将成员变量也存入堆内存(此时成员变量的初始值为默认值),成员方法不进入堆内存,但成员方法的地址进入堆内存存放
5.new完成后开辟空间的地址返回栈内存告诉s
6.接着打印s的地址
7.再打印成员变量s.name和s.age。对象s根据地址找到堆内存,输出记录着的成员变量值
8.然后给name、age赋值。对象s根据地址找到堆内存,给成员变量重新赋值
9.再次打印成员变量s.name和s.age。对象s根据地址找到堆内存,输出成员变量的值
10.最后调用成员方法。对象s根据地址找到堆内存,再根据成员方法的地址找到方法区中字节码文件中的read方法
11.将read方法加载到栈内存中去运行,打印内容。
12.方法打印完后退出栈
13.最后main方法也退出栈