JVM之TLAB

    阅读《深入理解Java虚拟机》的过程中,会碰到一些不明就里的名词。虽然大概知道意思,但是如果一眼飘过去,估计过不了多久就会遗忘。这里单独提出来,去查阅资料,先形成自己的理解,再继续往下对比着看。

  这里主要说说TLAB(Thread Local Allocation Buffer)的含义。

————————————————————————

  JVM中多个线程在堆内存进行分配,指针碰撞的过程中,假设线程1给对象A分配地址,指针还没来得及修改,此时线程2又给对象B分配地址还是用的没有修改前的指针,此时就会出问题。JVM在解决这个问题时有两个方案。

  一个是采用CAS的方式,配合失败重试的方式来保证更新操作的线程安全性。CAS是乐观锁的一种实现方式,乐观锁即假设操作不会有冲突,如果因为冲突失败了就重试,直到成功为止。

  另一个思路即TLAB,为每个线程分配一小块内存,这一小块内存是只有该线程才能进行对象的分配。线程享有对应区域的私有分配权。如果该区域耗尽,那么再分配新的一小块内存。这里要注意的是,线程只享有私有的分配权,对于使用还是共享的,GC管理也是整个管理,不会区分是哪个线程的对象。如果对象太大无法采用TLAB的模式,那么会被直接(CAS)分配到堆上。

 

上一篇:web前端开发培训公司,css高度


下一篇:面试篇 —— 谈谈你对CAS的理解