前言
在我们平时书写Java程序时,新建一个对象直接使用new
关键字就可以了,但是你知道当你写下new
这3个简单的字母时,Java虚拟机默默做了哪些工作吗?
看完下面这张图你就懂了~
对象创建流程图
名词解释
内存规整
如果所有用过的内存放一边,空闲的放一边,中间一个指针作为分界点的指示器,那么分配内存时只需把指针向空闲区那边移动即可,这就是指针碰撞
的分配方式。
内存不规整
已使用的内存和空闲内存交错,那么虚拟机就要维护一个列表,记录可用的内存块。分配时从列表中找到足够大的一块空间,然后更新列表记录,这就是空闲列表
的方式。
初始化零值
使得对象的实例字段可以不赋初始值就能使用。
进行必要的对象设置
比如,这个对象是哪个类的实例,如何找到类的元数据信息、对象哈希码、对象GC(垃圾回收)分代年龄等信息。
JVM流程结束之后
这时Java程序才开始执行类的init方法,按照用户的意愿初始化。