阿里架构师讲面试:你知道对象创建流程吗

341 阅读1分钟

对象创建

  1. 虚拟机遇到 new 指令。Object obj = new Object();

  2. 在字符串常量池中定位到一个类的符号引用。类的符号引用比如:java.util.concurrent.TimeUnit;

  3. 检查符号引用是否已经被加载、解析和初始化。如果没有则进行类加载。

  4. 虚拟机为新生对象分配内存(对象所需的内存大小在类加载完就可确定)

  5. 将分配到的内存空间都初始化为零值(不包括对象头)这一步操作保证了对象的实例字段在 Java 代码中可以不赋初始值就直接使用,程序能访问到这些字段的数据类型所对应的零值。

  6. 虚拟机对对象头进行必要的设置,例如这个对象是哪个类的实例、如何才能知道类的元数据信息、对象的哈希码、对象的 G C 分代年龄信息等等,这些信息都存放在对象的对象头(Object Header)之中。
    从虚拟机的视角来看,一个新的对象已经产生了,从 Java 程序角度来看,对象创建才刚刚开始。

  7. 执行 new 指令之后会接着执行初始化方法,把对象按照程序员的意愿进行初始化。

  8. 一个真正可用的对象才算完全产生出来。

对象访问

image

image

参考:

www.ityouknow.com/java/2019/0…

segmentfault.com/a/119000001…

blog.csdn.net/shimiso/art…

觉得有收获的话帮忙点个赞吧,让有用的知识分享给更多的人

## 欢迎关注掘金号:五点半社

## 关注微信公众号:五点半社(工薪族的财商启蒙)##