创建对象,如反序列化、克隆。其实就是new的过程。
1.检查
既然要创建,那类必须要先实例化。查找类是否实例化的过程就是在虚拟机找该类是否被加载。(其实类一旦被加载,就会执行静态方法)
2.为新生对象分配内存
分配的方式有两种,指针碰撞,空闲列表。
指针碰撞就是把内存分成两边,一边是被分配内存的空间,一边是空闲的空间。指针就来指向这两边的中间,一旦创建了新对象分配内存,指针就往空闲的那边挪一点。
空闲列表,学过操作系统的都知道,只要维护一个表就行,哪里是被分配的,哪里是空闲的。
3.初始化0值
在为对象分配内存空间以后,内存空间都会被初始化为0,如果是对象就为null.
这就是为什么java代码中不用自己初始化的原因
4.对对象进行必要的设置
这个对象是哪个类的实例,如何才能找到元数据信息,对象的哈希码,对象的分代年龄等。把这些信息放在对象头中
5.执行<init>方法
把对象按照程序员意愿进行初始化,即执行<init>方法。