虚拟机在遇到一个new指令时,
-
检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并检查这个符号引用所代表的类是否已被加载、解析和初始化过。
-
类加载检查通过后,开始为新生对象分配内存空间,要分配的内存的大小在类加载完成后便可以完全确定(指针碰撞、空闲列表),
分配空间栈中指针的并发情况: 正在给对象A分配内存,指针未来得及修改,对象B又使用原指针分配内存的情况。解决此问题的两种方案。
- 对分配的内存空间进行同步处理
- 把内存分配的动作按照线程划分在不同的空间之中进行
-
为内存空间初始化默认值
-
设置对象的对象头(元数据信息、哈希码、GC分代年龄、偏向锁等)