`

Java GC基本算法

 
阅读更多
转自:http://www.blogjava.net/showsun/archive/2011/07/21/354745.html


1、引用计数(reference counting)
    原理:此对象有一个引用,则+1;删除一个引用,则-1。只用收集计数为0的对象。
    缺点:无法处理循环引用的问题。如:对象A和B分别有字段b、a,令A.b=B和B.a=A,除此之外这2个对象再无任何引用,那实际上这2个对象已经不可能再被访问,但是引用计数算法却无法回收他们。


2、复制(copying)
    原理:把内存空间划分为2个相等的区域,每次只使用一个区域。垃圾回收时,遍历当前使用区域,把正在使用的对象复制到另外一个区域。
    优点:不会出现碎片问题。
    缺点:1、暂停整个应用。2、需要2倍的内存空间。

3、标记-清扫(Mark-and-sweep)---sun前期版本就是用这个技术。
    原理:对于“活”的对象,一定可以追溯到其存活在堆栈、静态存储区之中的引用。这个引用链条可能会穿过数个对象层次。第一阶段:从GC roots开始遍历所有的引用,对有活的对象进行标记。第二阶段:对堆进行遍历,把未标记的对象进行清除。这个解决了循环引用的问题。
    缺点:1、暂停整个应用;2、会产生内存碎片。

4、标记-压缩(Mark-Compact)自适应
    原理:第一阶段标记活的对象,第二阶段把为标记的对象压缩到堆的其中一块,按顺序放。
    优点:1、避免标记扫描的碎片问题;2、避免停止复制的空间问题。
   
    具体使用什么方法GC,Java虚拟机会进行监视,如果所有对象都很稳定,垃圾回收器的效率低的话,就切换到“标记-扫描”方式;同样,Java虚拟机会跟踪“标记-扫描”的效果,要是堆空间碎片出现很多碎片,就会切换回“停止-复制”模式。这就是自适应的技术。

5、分代(generational collecting)-----J2SE1.2以后使用此算法
    原理:基于对象生命周期分析得出的垃圾回收算法。把对象分为年轻代、年老代、持久代,对不同的生命周期使用不同的算法(2-3方法中的一个即4自适应)进行回收。


如上图所示:为Java的各代分布图
年轻代(young)
    分为3个区。一个Eden区,2个survivor区。大部分对象在Eden中生成。当Eden区满时,还存活的对象将被复制到survivor区。当该survivor区满时,此区的存活对象被复制到另外一个survivor区,当第2个survivor区也满时,该区还存活的对象将被复制到年老区(tenured)。

年老代(tenured)
   存放从年轻代(young)复制过来的对象。

持久代(perm)
    用于存放静态文件,如Java类、方法等。持久代对垃圾回收没有显著的影响,但是有些应用可能动态生成或者调用一些class。持久代大小通过-XX:MaxPermSize=N进行设置

Thinking in java给java gc取了一个罗嗦的称呼:“自适应、分代的、停止-复制、标记-扫描”式的垃圾回收器。

导致Gc的情况:
1、tenured被写满
2、perm被写满
3、System.gc()的显式调用。
4、上一次GC之后heap的各域分配策略动态变化。
分享到:
评论

相关推荐

    GC算法与种类

    java,GC,算法,可触及性,stop-the-world是一篇描述GC工作的文章

    Java_GC垃圾回收调优指南

    ### Java GC垃圾回收调优指南 #### 概述 在Java开发过程中,垃圾回收(Garbage Collection, GC)是管理内存资源的关键技术之一。合理的GC配置可以显著提高应用程序的性能和稳定性。本指南旨在帮助开发者深入理解...

    Java基础[Java基础]--Java GC工作原理

    增量式GC的具体实现算法是Train GC算法,它通过动态调整对象的分组,使得GC可以优先处理那些较旧且较少访问的对象,从而提高回收效率并减少程序暂停时间。 #### 四、分代收集 **4.1 分代理论背景** 分代收集...

    深入JVM内核—原理、诊断与优化视频教程-4.GC算法与种类

    在Java世界中,JVM(Java虚拟机)是运行所有Java应用程序的核心,它负责解析字节码、管理内存以及执行线程。...通过实践和研究GC算法及种类,开发者能更有效地管理内存,使Java应用程序运行更加高效。

    java基础学习JVM中GC的算法

    GC算法是JVM中的一种核心机制,它对Java程序的执行效率和内存使用情况产生了深远的影响。 在JVM中,GC算法可以分为两大类:Minor GC和Major GC。Minor GC是对年轻代(Young Generation)的垃圾回收,而Major GC是对...

    Java GC 专题

    Java垃圾收集(GC)专题针对的是Java编程语言中内存管理机制的重要组成部分。Java自1996年推出以来,其最大的改进之一就是引入了受管内存。在Java之前,C和C++语言中的内存泄漏问题十分常见,这导致开发稳定和安全的...

    Java垃圾回收GC机制

    不同的GC算法有其优缺,选择合适的GC算法可以提高Java程序的性能和稳定性。 Java垃圾回收GC机制是Java虚拟机中的一种自动内存管理机制,它可以提高Java程序的开发效率和稳定性。GC机制的实现基于分代收集算法,可以...

    Java程序员必须了解的GC工作原理

    在实际开发中,Java程序员可以通过调整JVM参数来控制GC的行为,比如设置堆大小、选择GC算法、设置新生代和老年代的比例等。合理配置这些参数可以有效地优化GC的性能,避免不必要的暂停和内存浪费。 最后,Apache ...

    成为JavaGC专家PartII-如何监控Java垃圾回收

    3. **GC策略与调优**:Java提供了多种GC算法,如Serial、Parallel、Concurrent Mark Sweep (CMS) 和 Garbage First (G1)。每种策略都有其适用场景和优缺点。例如,G1适合大内存、低延迟的应用,而CMS则在内存较小、...

    java虚拟机中gc的基本原理 .docx

    理解GC的基本原理对于优化Java应用的性能至关重要,尤其是在对性能要求较高的场景,如嵌入式系统和实时系统。 GC的基本原理主要涉及到对象的生命周期管理和内存的自动回收。当程序员通过`new`关键字创建一个对象时...

    Java 内存区域和GC机制

    - **新生代和老年代**:Java堆被划分为新生代(Eden和两个Survivor区)和老年代,不同的GC算法针对这两个区域进行优化。 3. **垃圾收集器** - **Serial GC**:单线程的收集器,适合小型应用和服务器启动时使用。 ...

    Java GC的副本.pptx

    【Java GC机制详解】 Java垃圾回收(Garbage Collection, GC)是Java虚拟机(JVM)的核心特性之一,它负责自动管理程序运行时的内存,有效地避免了内存泄露和溢出的问题。Java GC机制主要涉及以下几个关键方面: 1...

    JVM调优,GC算法汇总

    了解并熟练掌握这些GC算法和JVM调优技巧,对于解决性能问题、优化Java应用的运行效率至关重要,同时也是面试中经常被问到的话题。通过实践和理解,开发者可以更好地理解和控制JVM的行为,从而编写出更高效、更稳定的...

    jvm 参数及gc详解

    Java虚拟机(JVM)是Java程序运行的基础,它的配置参数和垃圾收集(GC)机制对于优化应用程序性能至关重要。本文将深入探讨JVM参数及其与Java垃圾收集相关的知识。 一、JVM参数详解 JVM参数可以分为三类:启动参数...

    JavaGC专家指南.pdf

    Java虚拟机(JVM)是运行Java字节码的虚拟机进程。它负责在不同操作系统上...以上就是对JavaGC专家指南中提到的知识点的一个全面解析,涵盖了从虚拟机的基本概念到内存管理,再到垃圾回收和性能调优的各个重要方面。

    Java Garbage Collection 与各种GC算法.zip

    Java是一种高性能、跨平台的面向对象编程语言。它由Sun Microsystems(现在是Oracle Corporation)的James Gosling等人在1995年推出,被设计为一种简单、健壮、可移植、多线程、动态的语言。Java的主要特点和优势...

    成为JavaGC专家(4)

    在第一篇文章成为JavaGC专家PartI—深入浅出Java垃圾回收机制中我们学习了不同GC算法的执行过程,GC如何工作,新生代及老年代的基本概念,在JDK7中你应该了解的5种GC类型以及他们的性能如何。在第二篇文章成为JavaGC...

Global site tag (gtag.js) - Google Analytics