java对象的创建
首先当jvm遇到一个new指令的时候,是否能在方法区查找到这个类的符号引用,并检查是否加载,如果没加载,则进行类加载,链接,初始化当前类。
假如有多个线程进行对象的创建,比如线程1,为对象A分配了一个地址X,还没来得及吧地址X赋值给A,
这个时候线程2为对象B分配地址X那么就出现线程安全问题,JVM是通过CAS保证分配的原子性,或者通过
TLAB(Thread local allocation buffer)为线程在堆中分配私有的线程缓冲,当TLAB用完再去使用CAS分配。
开启 TLAB -XX:+UseTLAB (默认);关闭-XX:-UseTLAB
这个时候就已经在堆中分配了内存空间,初始化为零值,虚拟机还需要对这个对象的对象头进行设置,比如类元数据,hash值,GC年龄等;