JVM中有哪些垃圾回收算法,每个算法各自的优势及它们之间的区别

1、引用计算法

一种老牌回收算法,通过引用计算来回收垃圾。

引用计数器的实现很简单,对于一个对象A ,只要有任何一个对象引用了A,则A的引用计数器就加1 ,当引用失效时,引用计数器就减1。只要对象A的引用计数器的值为0 ,则对象A就不可能再被使用。

引用计数法的问题:

1、引用和去引用伴随加法和减法,影响性能。

2、很难处理循环引用。


引用有强引用、软引用、弱引用、虚引用等类型,想了解的可以查看之前发表的这篇文章:

面试被问java如何实现强引用、软引用、弱引用、虚引用你知道么?

2、标记清除

标记清除算法是现在垃圾回收算法的思想基础。标记清除算法将垃圾回收算法回收分为两个阶段:标记阶段清除阶段

在标记阶段,首先通过根节点,标记所有从根节点开始的可达对象。因此,未被标记的对象就是未被引用的垃圾对象。在清除阶段,清除所有未被标记的对象。


3、标记压缩

标记-压缩算法适合用于存活对象较多的场合 ,如老年代。它在标记-清除算法的基础上做了一些优化。标记-压缩算法也首先需要从根节点开始,对所有可达对象做一次标记。但之后,它并不简单地清理未标记的对象,而是将所有的存活对象压缩到内存的一端。之后清理边界外所有的空间


标记清除VS标记压缩:标记清除空间碎片化而压缩会多一步压缩的过程。

4、复制算法

将原有的内存空间分为两块,每次只使用其中一块,在垃圾回收时,将正在使用的内存中的存活对象复制到未使用的内存块中,之后,清除正在使用的内存块中的所有对象,交换两个内存的角对象复制到未使用的内存块中,之后清除正在使用的内存块中的所有对象,交换两个内存的角色,完成垃圾加收。

与标记-清除算法相比,复制算法是一种相对高效的回收方法,不适用于存活对象较多的场合如老年代。


本章节简单理解回收算法,后面继续深入理解。

下节讲解:垃圾回收原理

相关文章

Java虚拟机中的垃圾回收算法:清理内存的艺术

Java虚拟机中的垃圾回收算法:清理内存的艺术Java程序员们经常提到“垃圾回收”这个词,但你知道它是如何工作的吗?今天,我们就来揭开Java虚拟机(JVM)中垃圾回收(GC)的神秘面纱,看看它是如何...

Java程序GC垃圾回收机制优化指南

Java程序GC垃圾回收机制优化指南作为一个Java开发者,我们经常会在任务管理器里看到Java进程占用内存不断增长,然后突然下降的现象。这其实就是在Java虚拟机中运行的垃圾回收(GC)机制在起作用...

Java虚拟机垃 圾回收算法大揭秘

Java虚拟机垃圾回收算法大揭秘提到Java虚拟机(JVM),就不得不提它的核心功能之一——垃 圾回收(GC)。GC作为JVM中至关重要的模块,承担着自动管理内存的重要职责。它就像一位默默无闻的“家务...

JVM垃圾回收机制详解与参数调优:让程序跑得更欢畅

JVM垃圾回收机制详解与参数调优:让程序跑得更欢畅提到Java编程,不得不提的就是JVM(Java虚拟机)。JVM作为Java程序运行的基础平台,其内部的垃圾回收机制更是不可或缺的一环。今天我们就来聊...

Java 垃 圾回收机制:让内存管理更轻松

Java 垃圾回收机制:让内存管理更轻松在Java的世界里,内存管理是一门艺术,而垃 圾回收机制正是这门艺术中最耀眼的明珠之一。它让我们从繁重的手动内存分配和释放工作中解脱出来,转而专注于业务逻辑的实...

垃 圾回收:Java程序背后的“清道夫”

垃圾回收:Java程序背后的“清道夫”在这个数字化的时代,内存管理成了每个程序员都绕不开的话题。而Java作为一门以“自动内存管理”著称的编程语言,它的垃 圾回收机制就像一位默默无闻却至关重要的“清道...