Skip to content

Commit fafbbd0

Browse files
committed
JMM 更新2
1 parent 93c7e5b commit fafbbd0

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

MD/MemoryAllocation.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,10 @@ Java 堆是整个虚拟机所管理的最大内存区域,所有的对象创建
4343
- 指针碰撞
4444
- 空闲列表
4545

46-
指针碰撞
46+
使用指针碰撞的前提是堆内存是完全工整的,用过的内存和没用的内存各在一边每次分配的时候只需要将指针向空闲内存一方移动一段和内存大小相等区域即可。
47+
48+
当队中已经使用的内存和未使用的内存互相交错时,指针碰撞的方式就行不通了,这时就需要采用空闲列表的方式。虚拟机会维护一个空闲的列表,用于记录哪些内存是可以进行分配的,分配时直接从可用内存中直接分配即可。
49+
50+
堆中的内存是否工整是有垃圾收集器来决定的,如果带有压缩功能的垃圾收集器就是采用指针碰撞的方式来进行内存分配的。
51+
52+
分配内存时也会出现并发问题,这样可以在创建对象的时候使用 `CAS` 这样的乐观锁来保证。

0 commit comments

Comments
 (0)