jvm垃圾回收算法

107 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情

2.垃圾回收算法

(1)标记-清除

image-20220331151808232

定义:

标记清除算法顾名思义,是指在虚拟机执行垃圾回收的过程中,先采用标记算法确定可回收对象,然后 垃圾收集器根据标识清除相应的内容,给堆内存腾出相应的空间这里的腾出内存空间并不是将内存空间的字节清0,而是记录下这段内存的起始结束地址,下次分配内存 的时候,会直接覆盖这段内存

优点:

速度较快

缺点:

容易产生大量的内存碎片,可能无法满足大对象的内存分配,一旦导致无法分配对象,那就会导致jvm 启动gc,一旦启动gc,我们的应用程序就会暂停,这就导致应用的响应速度变慢

(2)标记-整理

image-20220331151949071

定义:

标记-整理 会将不被GC Root引用的对象回收,清楚其占用的内存空间。然后整理剩余的对象,可以有效避免 因内存碎片而导致的问题,但是因为整体需要消耗一定的时间,所以效率较低

优点:

没有内存碎片

缺点:

速度慢

(3)复制

image-20220331152321558

image-20220331152205873

定义:

将内存分为等大小的两个区域,FROM和TO(TO中为空)。先将被GC Root引用的对象从FROM放入TO中, 再回收不被GC Root引用的对象。然后交换FROM和TO。这样也可以避免内存碎片的问题,但是会占用双倍 的内存空间。

优点:

不会有内存碎片

缺点:

需要占用双倍内存空间