• JVM学习-(2)


    垃圾回收的算法

    1,引用计数法

    2,标记清除法

    3,标记压缩法

      与2的区别在于进行回收时,会把对象压缩到内存的一端

    4,复制法

    5,分代法

      年轻代  老年代  永久代分别用不同的算法

    垃圾回收器

    1,串行的垃圾回收器

      单线程的进行垃圾回收,同时要暂停java应用的所有线程,一直到垃圾回收完毕。这种现象就是 (stop-the-word)

    2,并行垃圾回收器

      并行垃圾回收器是在串行垃圾回收器的基础上做了改进,将单线程改为了多线程,这样可以缩短垃圾回收时间

      a,ParNew垃圾收集器,主要工作在年轻代上,只是将串行的垃圾回收器改为了并行

      b,ParallelGC收集器工作机制和ParNewGC收集器一样,只是在此基础之上,新增了两个和系统吞吐量相关的参数,使得其使用起来更加的灵活和高效。

    3,CMS垃圾回收器

      CMS全称 Concurrent Mark Sweep,是一款并发的、使用标记-清除算法的垃圾回收器,该回收器是针对老年代垃圾回收的,通过参数-XX:+UseConcMarkSweepGC进行设置。

    4,G1垃圾回收器

      G1垃圾回收器是jdk1.7推出来的,jdk9用来代替CMS垃圾回收器成为默认的垃圾回收器,该回收器取消了之前年轻代,老年代的物理划分,取而代之的是将堆分为若干个区域,这样做的好处其实就是我们不必对每个代进行单独的设置

      在G1划分的区域中,年轻代的垃圾收集依然采用暂停所有应用线程的方式,将存活对象拷贝到老年代或者Survivor空间,G1收集器通过将对象从一个区域复制到另外一个区域,完成了清理工作。这就意味着,在正常的处理过程中,G1完成了堆的压缩(至少是部分堆的压缩),这样也就不会有cms内存碎片问题的存在了。在G1中,有一种特殊的区域,叫Humongous区域。

      a,Young GC主要是对Eden区进行GC,它在Eden空间耗尽时会被触发。

      b,Mixed GC,当越来越多的对象晋升到老年代old region时,为了避免堆内存被耗尽,虚拟机会触发一个混合的垃圾收集器,即Mixed GC,该算法并不是一个Old GC,除了回收整个Young Region,还会回收一部分的Old Region,这里需要注意:是一部分老年代,而不是全部老年代,可以选择哪些old region进行收集,从而可以对垃圾回收的耗时时间进行控制。

  • 相关阅读:
    使用PowerDesigner创建表并导入到数据库
    第二次作业——结对项目之需求分析与原型模型设计
    使用Git进行代码管理
    常用
    头文件
    只出现一次的数
    链表实现基础排序算法
    判断链表有公共点
    单链表判环
    二叉树非递归遍历
  • 原文地址:https://www.cnblogs.com/wangpengtao/p/10439071.html
Copyright © 2020-2023  润新知