在我们平时,创建对象只是简单的一个new,但是对于虚拟机是如何完成对象的创建的那,废话不多说 .
直接上图:
java虚拟机创建对象问题解答:
问:如何保证线程分配内存的原子性,举例来说,如果虚拟机正在给A对象分配内存的时候,A对象的内存还没有进行分配,B对象被分配了该内存的时候,这种情况虚拟机是如何办证内存分配的原子性的那?
有两种方法,第一种 虚拟机会采用CAS的方法进行内存的分配,也就是失败重试.CAS方法的意思 是有三个值,内存制V,旧的预期值A,以及新的预期值B,创建对象的时候只有当A与V相同的时候才不会重试.
第二种:使用TLAB方式为线程分配内存, 虚拟机会预先为线程创建一个小的内存区域,那个线程想要分配内存就在那个线程上的TLAB上分配,只有一个TLAB使用完之后才会创建一个新TLAB.
网友评论