JVM堆+GC算法
2021-03-02 14:38:18 6 举报
JVM堆+GC算法
作者其他创作
大纲/内容
新生代(伊甸园)
Obj
1
幸存区From
幸存区的From和To的划分是逻辑上的划分,没有对象的区域就是To区。实际上,设立两个区域来回复制还可以保证没有内存碎片(每次复制都会紧凑排序了)
2.清除未使用的(扫描第二次)
To
幸存区To
From
元空间
老年区
GC算法总结:
Eden
常量池
从1到2是一次轻GC的过程,Eden和From(某个幸存区)中的对象被GC,存活的对象一起移动到To区。结果是Eden区一定为空;两个幸存区为空的称为To区。
时间复杂度(小):复制算法>标记清除>标记压缩内存整齐度:复制算法=标记压缩>标记清除内存利用率:标记清除=标记压缩>复制算法总的来说没有完美的算法,如果对象存活时间长,那么复制算法的复制时间就会太长(复制算法每次都复制了存活的对象);但标记清除和压缩扫描对象次数太多(2次和3次),而且标记清除存在内存碎片。
标记压缩
复制算法(以一次轻GC为例)
GC算法
逻辑上划分再此,但元空间实际不在堆的内存空间中(可以通过-Xmx等命令计算看出)
2
堆
3.在上述基础上压缩内存,消除内存碎片
方法区
标记清除算法
1.标记(扫描一次)
所以Java的GC算法称为 分代垃圾回收算法:在新生代使用复制算法,在老年代使用标记清除+压缩
0 条评论
回复 删除
下一页