【深入浅出-JVM】(8):TLAB

概念

TLAB(Thread Local Allocation Buffer)线程本地分配缓冲区(线程私有分配区,私有分配,公共查看),占用 Eden 区(缺省 Eden 的1%),默认开启,JVM 会为每一个线程分配一块 TLAB 区域,避免堆对象共享造成的多线程线程同步。

背景

优化多线程堆空间分配对象指针碰撞问题

局限性

  1. TLAB空间一般不会太大,大对象直接进堆

  2. TLAB允许空间浪费,导致Eden区不连续,触发 GC

分配策略

一个 100KB 的 TLAB 区域,如果已经使用了 80KB,当需要分配 30KB 的对象时,虚拟机有 2 种选择:1. 废弃当前 TLAB 2.将 30KB 对象分配到堆上,保留当前 TLAB 给小于 20KB 的对象分配

开启命令

-XX: +UseTLAB (默认开启)


感谢您的耐心阅读,如果您发现文章中有一些没表述清楚的,或者是不对的地方,请给我留言,您的鼓励是作者写作最大的动力。

作 者 : @mousycoder

原文出处 : http://mousycoder.com/thinking-in-jvm/8/

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我们在学习使用Java的过程中,一般认为new出来的对象都是被分配在堆上,但是这个结论不是那么的绝对,通过对Jav...
    新时代农民工阅读 382评论 0 1
  • TLAB整理 HotSpot VM在JAVA堆中对象创建,布局,访问全过程(仅限于普通java对象,不包括数组和C...
    andersonoy阅读 3,057评论 0 2
  • 特点 Java 堆(Java Heap)是 Java 虚拟机所管理的内存中最大的一块,也被称为 “GC堆”,是被所...
    _晓__阅读 2,678评论 2 9
  • 工作之余,想总结一下JVM相关知识。 Java运行时数据区: Java虚拟机在执行Java程序的过程中会将其管理的...
    Huang远阅读 648评论 0 2
  • 第二部分 自动内存管理机制 第二章 java内存异常与内存溢出异常 运行数据区域 程序计数器:当前线程所执行的字节...
    小明oh阅读 1,214评论 0 2