`
youyu4
  • 浏览: 440287 次
社区版块
存档分类
最新评论

JVM之垃圾回收算法

 
阅读更多

JVM之垃圾回收算法

 

基本垃圾回收算法

 

 

1. 引用计数算法(Reference Counting)

 

比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。

 

优点:找可回收对象时很容易

缺点:无法处理循环引用的问题

 

 

2. 标记-清除(Mark-Sweep)


 

此算法执行分两阶段。第一阶段从引用根节点开始标记所有被引用的对象,第二阶段遍历整个堆,把未标记的对象清除。

 

优点:速度较快

缺点:需要暂停整个应用,同时会产生内存碎片。

 

 

3. 复制(Copying)


 

垃圾回收时,遍历当前使用区域,把正在使用中的对象复制到另外一个区域中。次算法每次只处理正在使用中的对象,因此复制成本比较小,同时复制过去以后还能进行相应的内存整理,不会出现“碎片”问题。

 

优点:没有内存碎片

缺点:需要两倍的内存空间

 

 

4. 标记-整理(Mark-Compact)


 

此算法分两阶段,第一阶段从根节点开始标记所有被引用对象,第二阶段遍历整个堆,把清除未标记对象并且把存活对象“压缩”到堆的其中一块,按顺序排放。

 

优点:克服上面两种算法的缺点,不会有内存碎片,也不需要两倍内存空间

缺点:回收时间会长一些

 

 

 

渐进式算法

 

       这类算法一般由基本算法组成,其核心思想是将内存分区域进行管理,在不同的区域和不同的时间采用不同的内存管理策略,从而避免因全系统的垃圾回收导致程序长时间暂停。这类算法一般有以下几种:

 

 

1. 火车算法

 

这种算法把成熟的内存空间划为固定长度的内存块,算法每次在一个块中单独执行,每一个块属于一个集合。此算法的具体执行步骤较复杂,且没有具体的应用场景,在此不浪费笔墨,有兴趣的同学可以自己研究之。

 

 

2. 增量收集算法

 

实时垃圾回收算法,即:在应用进行的同时进行垃圾回收。不知道什么原因JDK5.0中的收集器没有使用这种算法的。

 

 

3. 分代收集算法

 

基于对对象生命周期分析后得出的垃圾回收算法。把对象分为年青代、年老代、持久代,对不同生命周期的对象使用不同的算法(上述方式中的一个)进行回收。现在的垃圾回收器(从J2SE1.2开始)都是使用此算法的。

 

注意:这种算法在sun/oracle公司的Hotspot虚拟机中得到应用,是java程序员需要重点关注的一种算法。

 

 

 

按系统线程分

 

1.串行收集

 

串行收集使用单线程处理所有垃圾回收工作,因为无需多线程交互,实现容易,而且效率比较高。但是,其局限性也比较明显,即无法使用多处理器的优势,所以此收集适合单处理器机器。当然,此收集器也可以用在小数据量(100M左右)情况下的多处理器机器上。

 

适用情况:数据量比较小(100M左右);单处理器下并且对响应时间无要求的应用。

缺点:只能用于小型应用。

 

 

2.并行收集

 

并行收集使用多线程处理垃圾回收工作,因而速度快,效率高。而且理论上CPU数目越多,越能体现出并行收集器的优势。

 

适用情况:“对吞吐量有高要求”,多CPU、对应用响应时间无要求的中、大型应用。举例:后台处理、科学计算。

缺点:应用响应时间可能较长 。

 

 

3.并发收集

 

相对于串行收集和并行收集而言,前面两个在进行垃圾回收工作时,需要暂停整个运行环境,而只有垃圾回收程序在运行,因此,系统在垃圾回收时会有明显的暂停,而且暂停时间会因为堆越大而越长。

 

适用情况:“对响应时间有高要求”,多CPU、对应用响应时间有较高要求的中、大型应用。举例:Web服务器/应用服务器、电信交换、集成开发环境。

  • 大小: 11.5 KB
  • 大小: 13.5 KB
  • 大小: 12.9 KB
分享到:
评论

相关推荐

    JVM之基本的垃圾回收算法汇总

    这是最早的垃圾回收算法之一。它分为两个阶段:标记和清除。首先,从根节点开始遍历所有可达对象,标记所有被引用的对象;然后,清除未被标记的所有对象,释放它们占用的内存。这种算法简单直观,但有两个主要缺点:...

    JVM面试资料:JVM结构、JVM调优、四大垃圾回收算法、七大垃圾回收器

    四大垃圾回收算法:复制算法、标记-清除算法、标记-整理算法、分代收集算法 七大垃圾回收器:Serial、Serial Old、ParNew、CMS、Parallel、Parallel Old、G1 JVM调优:命令行指令,设置堆内存大小的参数

    详解JVM的垃圾回收算法来做细节.docx

    《详解JVM的垃圾回收算法》 垃圾回收是Java虚拟机(JVM)管理内存的重要机制,它自动识别并清理不再使用的对象,以避免内存泄漏。本文将深入探讨JVM的垃圾回收算法及其细节,包括可达性分析、根节点枚举、安全点、...

    JVM的垃圾回收算法工作原理详解

    "JVM垃圾回收算法工作原理详解" JVM垃圾回收算法工作原理详解主要介绍了JVM的垃圾回收算法如何判断对象是否可以被回收,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值。 JVM垃圾...

    JVM入门实战/arthas实战/垃圾回收算法/垃圾回收器/jvm内存模型分析

    第四节:垃圾回收算法 1.1标记清除算法 1.2复制算法 1.3 标记整理(标记压缩)算法 第五节:垃圾回收器 1.1Serial/Serial Old收集器 1.2 ParNew收集器 1.3Parallel Scavenge收集器 1.4Parallel Old收集器 1.5CMS...

    JVM的垃圾回收机制详解和调优

    二、垃圾回收算法 1. 标记-清除(Mark-Sweep):标记所有可达对象,然后清除不可达对象。缺点是容易产生碎片。 2. 复制(Copying):将内存分为两块,每次只使用一块,当一块满时,将存活对象复制到另一块,然后...

    深入理解JVM垃圾收集算法与垃圾收集器

    深入理解JVM垃圾收集算法与垃圾收集器

    JVM之垃圾回收器

    **JVM之垃圾回收器** Java虚拟机(JVM)是Java编程语言的核心组成部分,它负责执行字节码并管理程序运行时的内存。在JVM的内存模型中,垃圾回收(Garbage Collection, GC)是一项重要的功能,它自动识别并清理不再...

    jvm+ 垃圾算法+垃圾回收概述

    jvm+ 垃圾算法+垃圾回收概述

    JVM调优总结(三)基本垃圾回收算法.pdf

    JVM垃圾回收算法总结 垃圾回收算法是Java虚拟机(JVM)中的一种机制,用于回收无用的对象以释放内存空间。垃圾回收算法可以从不同的角度划分,下面是常见的垃圾回收算法: 1. 引用计数(Reference Counting) ...

    JVM垃圾回收机制

    JVM垃圾回收机制通过两种主要算法来确定对象是否成为垃圾,即“可达性分析算法”和“引用计数法”。 - 可达性分析算法:这种方法通过确定对象的引用链来判断对象是否可达。GC根对象包括虚拟机栈中引用的对象、方法...

    深入探索JVM垃圾回收:ARM服务器垃圾回收的挑战和优化.docx

    3. 优化垃圾回收算法:针对 ARM 服务器的特点,可以优化 JVM 的垃圾回收算法。例如,使用更加高效的垃圾回收算法,如标记-清除算法、复制算法等,来提高垃圾回收的效率。此外,还可以考虑使用增量式垃圾回收算法,...

    Java+JVM+垃圾回收机制

    - **概念**: 这是最原始的垃圾回收算法之一,分为标记和清除两个阶段。 - **标记阶段**: 从根节点开始遍历所有的引用链,将所有可达的对象标记为非垃圾。 - **清除阶段**: 清除未被标记的对象所占用的空间。需要注意...

    JVM历史发展和内存回收笔记

    2. **垃圾回收算法**: - **标记-清除(Mark-Sweep)**:首先标记出所有活动对象,然后清除未标记的对象。缺点是容易产生内存碎片。 - **复制(Copying)**:将内存分为两块,每次只使用一块,当一块用完后,将...

    JVM内存分配与垃圾回收详解

    垃圾收集算法是 JVM 中用于垃圾回收的算法,常见的垃圾收集算法有标记-清除算法、复制算法、标记-压缩算法、分代收集算法等。 总结 本文对 JVM 内存分配与垃圾回收进行了详细的解释,包括 JVM 运行时数据区域、...

    jvm_gc.rar_jvm_垃圾回收

    了解JVM内存模型和垃圾回收机制对于Java开发人员来说非常重要,可以帮助解决内存溢出、性能瓶颈等问题,提升程序的稳定性和效率。通过深入学习这些概念,可以更好地理解和控制Java程序在运行时的行为。

    JVM垃圾回收机制与GC性能调优

    Java虚拟机(JVM)的垃圾回收(GC)机制是Java程序高效运行的关键部分,它自动管理内存,释放不再使用的对象以避免内存泄漏。本文主要探讨JVM堆内存的结构和GC的工作原理,以及如何进行性能调优。 JVM堆是Java应用...

    垃圾回收相关算法.pdf

    本文将深入探讨几种垃圾回收算法,帮助读者理解JVM底层原理。 1. 引用计数算法: 引用计数算法是最直观的垃圾回收策略,它为每个对象分配一个引用计数器,每当有对象引用它时,计数器加1;当引用失效时,计数器减1...

Global site tag (gtag.js) - Google Analytics