`

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机制

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

    java基础学习JVM中GC的算法

    主要介绍了java基础学习JVM中GC的算法,通过图文加深对GC算法思路的理解。

    Java SE编程入门教程 java GC(共6页).pptx

    Java SE编程入门教程 java GC(共6页).pptx Java SE编程入门教程 java instanceof(共3页).pptx Java SE编程入门教程 java IO(共28页).pptx Java SE编程入门教程 java Math(共11页).pptx Java SE编程入门教程 ...

    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...

    Java虚拟机详解04----GC算法和种类【重要】 - 千古壹号 - 博客园.html

    Java虚拟机详解04----GC算法和种类【重要】,有助于更深入理解记忆,文字配图片,10分钟让你记住gc工作机制。

    JVM调优,GC算法汇总

    JVM调优,GC算法汇总,面试必问,早点准备,很好的资料!

    成为JavaGC专家上(1)—深入浅出Java垃圾回收机制

    如果你曾经想过如何正确的选择GC算法,那意味着你已经完全理解你所开发的应用的特点。当然,我们不能以偏概全,这不能作为评价一个好的开发人员的共通标准。但是,我要说的是,深入理解GC是成为一名伟大的程序员的...

    jvm知识点总览(类的加载机制+内存结构+GC算法 垃圾回收+GC分析 命令调优)

    jvm知识点总览(类的加载机制+内存结构+GC算法 垃圾回收+GC分析 命令调优);jvm知识点总览(类的加载机制+内存结构+GC算法 垃圾回收+GC分析 命令调优);jvm知识点总览(类的加载机制+内存结构+GC算法 垃圾回收+GC...

    JAVA中对GC的理解

    GC是什么,作用有哪些 C++与java之间内存管理的区别 标记垃圾的算法有哪些 回收垃圾的算法有哪些 垃圾回收器有哪些

    Java垃圾收集处理方法

    GC算法是Java垃圾收集处理方法的核心。GC算法可以分为两大类:基础篇和实现篇。基础篇的GC算法包括标记-清理算法、复制算法和标记-压缩算法。实现篇的GC算法包括Serial GC、Parallel GC、Concurrent Mark-and-Sweep...

    JVM体系结构与GC调优

    JVM体系结构与GC调优相关介绍,包含JVM体系结构、常用GC算法、内存管理、垃圾回收器、虚拟机调优、相关监控工具等

    Java SE编程入门教程 java判断循环(共79页).ppt

    Java SE编程入门教程 java GC(共6页).pptx Java SE编程入门教程 java instanceof(共3页).pptx Java SE编程入门教程 java IO(共28页).pptx Java SE编程入门教程 java Math(共11页).pptx Java SE编程入门教程 ...

    Java SE编程入门教程 java泛型(共11页).pptx

    Java SE编程入门教程 java GC(共6页).pptx Java SE编程入门教程 java instanceof(共3页).pptx Java SE编程入门教程 java IO(共28页).pptx Java SE编程入门教程 java Math(共11页).pptx Java SE编程入门教程 ...

    Java SE编程入门教程 java序列化(共14页).pptx

    Java SE编程入门教程 java GC(共6页).pptx Java SE编程入门教程 java instanceof(共3页).pptx Java SE编程入门教程 java IO(共28页).pptx Java SE编程入门教程 java Math(共11页).pptx Java SE编程入门教程 ...

    成为JavaGC专家上(3)—深入浅出Java垃圾回收机制

    本文是成为JavaGC专家系列文章的第三篇。在第一篇《》中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生代和老年代,你应该了解的JDK7中的5种GC类型,以及这5种类型对于应用性能的影响?在第二篇《》,...

    JAVA面试核心知识点整理283页-2020.pdf.zip

    jvm内存分区,gc算法,类加载机制。并发编程,并发编程各大容器,锁。框架spring mybatis原理,组件介绍。架构设计有设计模式,负载均衡。网络有协议,java 高并发io框架netty。数据结构包括堆栈,队列,链表,...

Global site tag (gtag.js) - Google Analytics