【深刻理解JVM虚拟机】TLAB(Thread Local Allocation Buffer)

1,堆是JVM中全部线程共享的,所以在其上进行对象内存的分配均须要进行加锁,这也致使了new对象的开销是比较
2,Sun Hotspot JVM为了提高对象内存分配的效率,对于所建立的线程都会分配一块独立的空间TLAB(Thread Local Allocation Buffer),
   其大小由JVM根据运行的状况计算而得,在TLAB上分配对象不须要加锁,所以JVM在给线程的对象分配内存时会尽可能的在TLAB上分配,
   在这种状况下JVM中分配对象内存的性能和C基本是同样高效的,但若是对象过大的话则仍然是直接使用堆空间分配
3,TLAB仅做用于新生代的Eden Space,所以在编写Java程序时,一般多个小的对象比大的对象分配起来更加高效。
4,全部新建立的Object 都将会存储在新生代Yong Generation中。
   若是Young Generation的数据在一次或屡次GC后存活下来,那么将被转移到OldGeneration。
   新的Object老是建立在Eden Space。

PS:虽然整体来讲堆是线程共享的,可是在堆的年轻代中的Eden区能够分配给专属于线程的局部缓存区TLAB,也能够用来存放对象。至关于线程私有的对象。缓存

相关文章
相关标签/搜索