可能出现的情况:当正在给对象A分配内存,指针还没来得及修改,对象B又同时使用了原来的指针来分配内存的情况。解决方案:(1)对分配内存空间的动作进行同步处理虚拟机是采用CAS配上失重重试的方式保证更新操作的原子性。(2)把内存分配的动作按照线程划分在不同的空间进行每个线程在java堆中预先分配一下块内存,称为本地线程分配缓冲(TLAB=Thread Local Allocation Buffer)。哪个线程要分配内存,就在哪个线程的本地缓冲区中分配,只有本地缓冲区用完了,分配新的缓存区时才需要同步锁定。虚拟机是否需要使用TLAB,可以通过-XX:+/-UserTLAB参数来设定。内存分配完成之后,虚拟机必须将分配到的内存空间(不包括对象头)都初始化为零值。如果使用了TLAB,这一项工作也可以提前至TLAB分配时顺便进行。这步操作保证了对象的实例字段在java代码中可以不赋初始值就直接使用,使程序能访问到这些字段的数据类型所对应的零值。