JVM内存分配

Posted guodongdidi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM内存分配相关的知识,希望对你有一定的参考价值。

内存规整

堆中的内存空间是否是规整的(连续的),由JVM垃圾收集器所采用的垃圾回收算法决定,如果垃圾回收算法是带有压缩算法的,则为连续的、规整的,如果垃圾回收算法是标记-清除算法(例如CMS收集器),则内存是不连续的、不规整的。
内存空间规整与否,决定这内存的分配方式。

内存分配方式

指针碰撞

内存空间是规整的,连续的内存中,一边是已分配的内存空间,一边是尚未分配的内存空间,两部分空间的中间有一个指针,通过移动指针的方式,来完成新对象实例的内存分配,这种分配方式叫指针碰撞法。

空闲列表

内存是不规整的,只能找一块足够大的空间,分配给对象实例,这种分配方式叫空闲列表法。

并发指针碰撞问题

同一块内存区域执行指针碰撞,会有并发问题,解决办法是:
1、为分配内存空间的动作进行同步加锁处理。
2、使用本地线程分配缓冲(TLAB,即Thread Local Allowcation Buffer)。

TLAB

为每个线程在堆中预先分配一小块内存TLAB,线程在各自的TLAB上为自己的实例对象分配内存空间。
当TLAB使用完时,加同步锁,然后分配新的TLAB。





以上是关于JVM内存分配的主要内容,如果未能解决你的问题,请参考以下文章

JVM内存分配

JVM对象内存分配流程

深入理解JVM内存分配策略

JVM内存分配与回收

深入理解JVM之JVM内存区域与内存分配

JVM初探- 内存分配GC原理与垃圾收集器