码迷,mamicode.com
首页 > 其他好文 > 详细

JVM内存分配

时间:2018-12-05 21:54:34      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:read   线程   部分   cms   local   内存分配   垃圾   算法   thread   

内存规整

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

内存分配方式

指针碰撞

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

空闲列表

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

并发指针碰撞问题

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

TLAB

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

JVM内存分配

标签:read   线程   部分   cms   local   内存分配   垃圾   算法   thread   

原文地址:https://www.cnblogs.com/guodongdidi/p/10073389.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!