`
不爱不见
  • 浏览: 275916 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java的垃圾收集算法和垃圾收集器

    博客分类:
  • JVM
阅读更多
1.垃圾回收算法
  1.1标记-清除
   该算法主要分为标记和清除两个阶段,先对需要回收的对象进行标记,然后再进行清除,该算法的有点是简单,缺点有两个,一个是效率问题,标记和清除的效率都不高,另一个问题是空间问题,标记清除之后会造成大量的空间碎片,当程序需要分配一个大对象而无法找到连续的空间时就必须出发一次垃圾回收。
  1.2复制算法
  该算法是将内存空间分为大小相等的两块,在其中的一块进行对象的分配,需要垃圾回收时将其中一块存活的对象拷贝到另一块即可,然后把用过的内存块给清理掉,该算法的有点是:不用考虑内存碎片问题,实现简单,运行高效,缺点是:将内存缩小为了原来的一半,代价有点儿高。
  现代的虚拟机都是采用此中算法来进行新生代的垃圾回收的,由于java中的新生代对象具有”朝生夕死“的特点,所以讲内存分为一块较大的Eden空间和两块较小的Survivor空间,每次使用Eden和Survivor空间,HopSpot默认的比例是8:1,按照此种比例,新生代的空间为90%,只有10%的空间会被浪费掉,如果进行了一次垃圾回收survivor仍然不能满足空间的需要,此时需要通过分配担保机制将相关的对象分配到老年代中。
  1.3标记-整理算法
  复制算法在对象存活率较高的情况下就要执行较多的复制操作,效率会变低,另外如果不想浪费50%的空间,还需要进行分配担保机制,以应对100%极端存活的情况,所以老年代不用此种算法。
  老年代采用”标记-整理“的算法,标记过程和标记-清除算法一样,但是整理却是所有存活的对象向一端移动,然后清理掉边界意外的内存。
  1.4分代收集算法
  当前的商业虚拟机都此种收集算法,根据对象的存活周期将内存分为几块,一般讲java堆分为新生代和老年代,在新生代,采用复制算法,而对于老年代,对象存活率高,没有额外的空间进行分配担保,就不许使用”标记-整理“ 或者”标记-清除“进行垃圾回收。

2.垃圾收集器
  2.1Serial 收集器
   特点:是一个单线程的垃圾回收期,在进行垃圾回收时必须暂停其他所有的工作线程。
   优点:简单而高效,没有线程交互的开销。Serial收集器对于运行在Client模式下的虚拟机来说是一个很好的选择,也是该模式下的默认垃圾收集器。
   2.2ParNew收集器
  是Serial收集器的多线程版本,属性和参数与Serial收集器相同。
  该收集器是server模式下的新生代默认收集器,除了Serial,只有它能够和CMS收集器配合工作。
   2.3Parallel Scavenge
  特点:是一个新生代收集器,使用复制算法,并行和多线程收集器,它会尽可能的缩短垃圾回收时用户线程的停顿时间,目标是达到一个可控制的吞吐量,所谓吞吐量是cpu运行用户代码的时间和cpu总消耗时间的比值,该收集器被称为”吞吐量“优先的收集器,另外该收集器还有一个-XX:+UseAdaptiveSizePolicy,用来自动调节新生代的大小,,自适应调节策略也是与ParNew的主要的区别。
2.4Serial Old收集器
  Serial Old是Serial的老年代版本,采用”标记-整理“算法进行垃圾回收,被client下的虚拟机使用,在Server模式下:一个用途是和jdk1.5之前的版本中Parallet Scavenge收集器搭配使用,另外一个用户就是作为CMS收集器的后备预案。
2.5Parallel Old 收集器
  该收集器是parallel Scavenge收集器的老年代版本,使用多线程和”标记整理“算法。
  主要是为了与Parallel Scavenge配合使用,如果新生代选择了Parallel Scavenge收集器,那么老年代除了Serial Old外别无选择,单线程的Serial old在服务器性能上会严重下降。
2.6 CMS 收集器
  CMS(concurrent mark Sweep)是一种以获取最短回收停顿时间为目标的收集器,该收集器复杂一点,收集时候分为以下四步:
  1>初始标记。
  2>并发标记。
  3>重新标记。
  4>并发清除。
初始标记和重新标记这两个过程仍然要停止用户线程,重新标记是为了修正在初始标记和用户线程同时执行新产生的需要被清除的对象,这两个过程很快,主要的耗时是并发标记和并发清除中。
  该收集器有三个缺点:
1>对cpu敏感。cms默认开启的回收线程数目为(cpu数量+3)/4,如果cpu过多会导致用户感到突然停顿。
2>cms无法处理浮动垃圾。由于cms并发清理阶段用户线程还在不断地运行,这一部分垃圾可能出现在标记之后,cms无法处理他们,只好在下一次进行一次处理。
3>cms是基于“标记-清除”算法,可能会产生大量的内存碎片。
2.7 G1收集器
在jdk1.6 update14中提供了一个使用版本,与前面的cms相比,他是基于“标记-整理”算法,不会产生内存碎片,另外他可以精确的控制停顿,让垃圾回收不超过N毫秒,另外他还可以在不牺牲吞吐量的情况下完成低停顿的垃圾回收,这是因为它会避免在全区域进行垃圾回收,g1会将整个java堆划分为多个大小固定的独立区域,并根据这些垃圾的堆积程度,在后台维护一个垃圾优先列表,,优先回收垃圾最多的区域。
1
3
分享到:
评论
2 楼 fair_jm 2013-05-26  
归纳得很好 还有G1 学习了
1 楼 海滩拾贝壳的小孩 2012-09-24  
感觉自己懂得还是太少,学习了

相关推荐

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

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

    1_Java虚拟机(垃圾收集器和算法).pdf

    经典的Java虚拟机(垃圾收集器和算法)文档,需要深入了解Java虚拟机的原理的人员可以观看,可以升入了解Java虚拟机(垃圾收集器和算法)

    【Java正来-Java虚拟机专题】-Java垃圾收集器与内存分配策略

    主要整理内容为:分析了垃圾收集的算法和JDK1.7中提供的7款垃圾收集器的特点以及运作原理。以及内存分配策略

    论文研究-基于实时性的Java虚拟机垃圾收集算法.pdf

    提出了一种适用于实时性环境的Java虚拟机垃圾收集算法。该算法对增量式收集器中堆空间的划分方式、引用跟踪等方面进行了改进,以减少垃圾收集带来的不确定性暂停,并可以使用户指定一个时间段内垃圾收集导致应用程序...

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

    1.5CMS(Current Mark Sweep)收集器 1.6G1收集器 第六节:JVM参数调优 1.1 JVM重要参数介绍 1.2JVM参数调优 1.3JVM参数设置思路1.4JVM调优常用指令说明 第七节:JVM项目实战 1.1案例背景 1.2排查步骤 1.3....

    Java垃圾回收知识,垃圾回收资料

    有哪些垃圾回收算法和垃圾收集器?它们之间的区别是什么? 垃圾回收的优缺点是什么?如何根据应用场景选择合适的垃圾收集器? 如何判断对象是否可以被垃圾回收?Java中的垃圾回收器是如何判断对象是否可达的? 哪些...

    今天会是有Offer的一天么:面试时被问到的JAVA中的垃圾收集算法

    知道有什么垃圾收集器么,知道有哪些垃圾收集算法么? 我:心中一阵窃喜。这不是我前两天晚上打游戏。呸这不是前两天晚上我在《JAVA虚拟机》这本书第三章看过的内容么。其实这个面试问题非常常见了,基本各个公司...

    GC垃圾收集器.xmind

    GC垃圾收集器+GC垃圾收集算法,配合java虚拟机一起看,效果更佳,内容简洁,重要,应届小白面试必备技能

    Java 垃圾回收新算法刍探

    由Java语言与C/C++对象在内存管理方式的不同,引出了Java语言的优势技术——垃圾...通过对GC工作原理的阐述及对一些传统的垃圾收集器的分析,提出了一种新的垃圾处理算法,一定程度上改善和提高了Java垃圾处理的性能。

    JAVA虚拟机精讲

    比如:字节码的编译原理、字节码的内部组成结构、通过源码的方式剖析HotSpot VM 的启动过程和初始化过程、Java 虚拟机的运行时内存、垃圾收集算法、垃圾收集器(重点讲解了Serial 收集器、ParNew 收集器、Parallel ...

    理解JAVA虚拟机-内存管理、垃圾收集器.pptx

    讲解java虚拟机 包括内存模型,内存管理,垃圾回收算法,垃圾回收调优,arthas、jmap内存问题排查

    Java虚拟机精讲.高翔龙.带书签完整版.pdf

    本书以极其精练的语句诠释了HotSpot VM 的方方面面,比如:字节码的编译原理、字节码的内部组成结构、通过源码的方式剖析HotSpot VM 的启动过程和初始化过程、Java 虚拟机的运行时内存、垃圾收集算法、垃圾收集器...

    JAVA虚拟机精讲 pdf

    本书以极其精练的语句诠释了HotSpot VM 的方方面面,比如:字节码的编译原理、字节码的内部组成结构、通过源码的方式剖析HotSpot VM 的启动过程和初始化过程、Java 虚拟机的运行时内存、垃圾收集算法、垃圾收集器...

    java虚拟机

    是垃圾收集的主要区域("GC 堆"),现代的垃圾收集器基本都是采用分代收集算法,该算法的思想是针对不同的对象采取不同的垃圾回收算法,因此虚拟机把 Java 堆分成以下三块: - 新生代(Young Generation) - 老年代...

    JVM 知识点整理:GC垃圾收集器及相关算法

    JVM 知识点整理:GC垃圾收集器判断哪些对象需要回收引用计数器算法可达性分析算法引用还有分类(了解)“缓刑” finalize(了解)开始垃圾收集标记 – 清除算法复制算法标记 – 整理算法分代收集算法HotSpot 算法...

    钻研JAVA虚拟机 全面掌握JVM JAVA虚拟机深入浅出实战课程 视频附带课程代码

    ├─(8) 0808_【掌握】Java垃圾收集流程.mp4 ├─(9) 0809_【了解】垃圾回收算法.mp4 ├─(10) 0810_【了解】串行垃圾收集器.mp4 ├─(11) 0811_【了解】并行垃圾收集器.mp4 ├─(12) 0812_【了解】CMS垃圾收集器....

    谈谈你对垃圾回收机制的了解?.docx

    可达性分析:这种类型的垃圾收集通常叫做跟踪性垃圾收集器。 原理很简单,就是将对象即及引用关系看着一个图。选定活动对象作为 GC Roots,然会跟踪引用链,如果一个对象和GC Roots之间不可达,也就是说不存在引用链...

    java虚拟机精讲(电子工业出版社出版)

    本书以极其精练的语句诠释了 HotSpot VM的方方面面,比如:字节码的编译原理、字节码的内部组成结构、通过源码的方式剖析 HotSpot VM 的启动过程和初始化过程、Java 虚拟机的运行时内存、垃圾收集算法、垃圾收集器...

    深入java虚拟机

    1. JVM调优 1.1 JVM调优总结(一)-一些概念 1.2 JVM调优总结(二)-一些概念 1.3 JVM调优总结(三)-基本垃圾回收算法 1.4 JVM调优总结(四)-垃圾...4.2 JVM内存管理:深入垃圾收集器与内存分配策略 4.3 深入理解JVM

Global site tag (gtag.js) - Google Analytics