JVM内存空间快速分配技术

    xiaoxiao2022-07-02  107

    通常情况下,如果系统中存在大量的连续内存可以用来分配对象,这种情况下若采用指针碰撞算法来进行对象分配的话,效率是很可观的。

    指针碰撞算法:记录上一次对象分配的位置,当有新对象需要分配时,若检查剩余的空间可以满足容纳这个对象,则只需要一次移动指针的操作便可完成内存的的分配。

    对于多线程的应用:内存分配需要保证线程安全,如果通过全局锁的方式来保证线程安全的话,内存分配将会成为性能瓶颈。所以HotSpot采用线程局部分配缓冲技术(TLAB),每一个线程都拥有自己的TLAB,位于Eden区中的一小块空间(TLAB的平均大小一般限制在Eden区的1%以下)。因为每一个TLAB是仅对一个线程可见的,所以分配操作可以采用指针碰撞技术快速完成,而不需要任何锁机制,只有在线程将TLAB填满并且需要获得一个新的TLAB的时候,同步才是必须的。 在开启UseTLAB选项的前提下,在分配一个新的对象空间的时候,将首先在TLAB中分配对象空间,若分配空间请求失败,再尝试使用加锁机制在Eden区分配空间。

    最新回复(0)