微信公众号:路人zhang
网站救助计划

1.为阅读体验,本站无任何广告,也无任何盈利方法,站长一直在用爱发电,现濒临倒闭,希望有能力的同学能帮忙分担服务器成本


2.捐助10元及以上同学,可添加站长微信lurenzhang888,备注捐助网站倒闭后可联系站长领取本站pdf内容


3.若网站能存活下来,后续将会持续更新内容

当前位置: Java > JVM高频面试题 > 3.对象是如何创建的

对象的创建过程主要有以下几个过程

对象创建过程
对象创建过程
  1. 类加载检查:虚拟机遇到一条 new 指令时,首先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载过、解析和初始化过。如果没有,那必须先执行相应的类加载过程。
  2. 分配内存:在类加载检查后,就要为新生对象分配内存了,对象内存所需大小在类加载完成后便可以确定,内存分配方式根据Java堆中内存是否完整主要分为指针碰撞空闲列表两种。
  3. 初始化零值:内存分配完成后,虚拟机需要将分配到的内存空间都初始化为零值(不包括对象头),这也是为什么字段在Java代码中可以不赋值就能直接使用的原因。
  4. 设置对象头:初始化零值后,虚拟机需要对对象进行必要的设置,例如这个对象是哪个类的实例、如何才能找到类的元数据信息、对象的哈希码、对象的GC分代年龄等信息都是存放在对象的对象头中。根据虚拟机当前的运行状态不同,如是否使用偏向锁等,对象头都会有不同的设置方式。
  5. 执行init方法:上述操作完成后,从虚拟机的角度看,一个新的对象已经产生了。但从Java程序的角度看,对象创建才刚刚开始,<init>方法还没有执行,所有的字段都还为零。所以,一般执行完new指令后还会接着执行<init>方法,把对象按照程序员的意愿进行初始化(赋值),这样一个真正可用的对象才算生产出来

本站链接:https://www.mianshi.online如需勘误或投稿,请联系微信:lurenzhang888


点击面试手册,获取本站面试手册PDF完整版