首页 > java > java对象创建分配内存是如何保证线程安全的

java对象创建分配内存是如何保证线程安全的

作者:bin

我们在new一个对象时,都会在堆中开辟一个内存空间给这个对象。
那么多个线程如果开辟到了同一个地址的内存,不就冲突了?

那么解决的办法有2种:
1:开辟内存空间的时候使用cas版本比较,并且失败时进行重试
2:开辟一个线程独有的私有空间,现在在自己的私有空间去新建对象,就不存在线程安全问题

HotSpot虚拟机使用的就是第二种方式:TLAB(Thread local Allocation buffer),线程本地分配缓存,
每个线程在eden区域划分一个属于线程私有的空间,用于创建对象, 然后对象存活后就到了SurvivorTo、SurvivorFrom空间。

第二种方式虽然线程创建私有空间的操作也可能有线程安全问题,但是碰撞次数和概率要比第一种方式低很多

您必须 [ 登录 ] 才能发表留言!