JVM为创建的对象分配内存时的线程安全问题:
对象A还没分配完内存,开始为对象B分配内存。
解决方案:
1. 对分配内存的动作进行同步处理。
CAS + 失败重试:保证更新操作的原子性
Compare And Sweep 比较且替换 一种常见的Java并发算法。详见 CAS;
2. TLAB Thread Local Allocation Buffer 本地线程分配缓冲 每个线程在Java堆中预先分配一小块内存,线程需要内存时现在TLAB中分配,TLAB用完之后分配新的缓冲区时才进行同步锁定。
是否使用TLAB 通过参数-XX:+/-UseTLAB参数来设定。
将分配到的内存空间都初始化为零值
对象设置,然后将信息存放在对象头 Object Header中。