博文中讨论的对象仅限普通Java对象
Person person = new Person("小明");
- 虚拟机检查Person类是否已经被加载、解析和初始化过。如果没有,那必须先执行类加载过程。
- 类加载检查通过后,接下来虚拟机为新生对象分配内存
- 虚拟机将分配到的内存空间(但不包括对象头)都初始化为零值,如果使用了TLAB(本地线程分配缓冲 Thread Local Allocation Buffer),这一项工作也可以提前至TLAB分配时顺利进行。
- 虚拟机设置对象头的信息:这个对象是哪个类的实例、GC分代年龄信息等信息存放在对象头中
- 执行Class文件中的<init>()方法(类的构造函数),按照程序员的意愿对对象进行初始化,一个完整的可用的对象就构造出来了