美文网首页
2018-04-28 HotSpot中的回收算法实现

2018-04-28 HotSpot中的回收算法实现

作者: 江江江123 | 来源:发表于2018-04-28 11:08 被阅读0次

对象的产生流程:

new 一个对象,编译通过,从新生代eden(见复制算法)分配内存,没被回收进入Survivor,年龄+1,默认经过15次进入老年代,或者survivor中同年龄的对象超过一半,就将这一半及其以上年龄的对象加入老年代。如果新生代存活对象超过survivor容量,则通过担保直接进入老年代,老年代空间足够,否则进行Full回收(速度慢)

什么对象需要回收:不与gc root关联的对象
怎么查找:oopmap(通过hashcode检索)
什么时候执行:在安全点和安全区域执行
为什么在这些时间执行?
因为执行gc时所有线程要停止,在运行的线程发现gc开始进入安全点,在等待的线程进入安全区域,出安全区域时,先查看jvm是否在gc状态,不在gc状态时正常运行;否则继续等待
怎么回收对象:根据活动周期将对象分为新生代和老年代,用收集器回收

7种收集器

1Serial收集器 默认收集器(相对简单高效)

用户线程->安全点(暂停其它线程)->判断新生代->复制算法(gc单线程)->用户线程->安全点(暂停其它线程)->判断老年代->标记整理算法(gc单线程)->用户线程

2ParNew收集器 Serial收集器的多线程版本

用户线程->安全点(暂停其它线程)->判断新生代->复制算法(gc多线程)->用户线程->安全点(暂停其它线程)->判断老年代->标记整理算法(gc单线程)->用户线程

3Parallel Scavenge收集器

新生代收集器,基本和ParNew一样
适合后台运算不需要太多交互的任务
通过降低gc回收时间(牺牲吞吐量和新生代空间)提高效率,但是回收时间过短会导致回收次数增多
gc自适应调节:根据当前系统的运行状况,动态调整gc回收时间和最大吞吐量
吞吐量:程序运行时间/(程序运行时间+gc时间)

4Serial Old收集器 老年代收集器

作用:
1与Parallel Scavenge收集器搭配使用(jdk1.5及之前)
2Cms收集器的备选方案

5Parallel Old收集器

Parallel Scavenge收集器的老年代版本,在该收集器出现之前选择Parallel Scavenge收集器只能选择Serial Old收集器收集老年代so,性能很低。
1.5以后采用该收集器收集老年代,适合注重吞吐量及cpu资源的场合
新生代和老年代都采用多线程GC

6CMs 收集器

获取最短回收停顿的收集器,适合b/s系统,基于标记清除算法,共4个步骤:
初始标记,并发标记,重新标记,并发清除
耗时操作只有初始标记和重新标记。
缺点:
1并发占用线程,可能导致程序变慢,总吞吐量降低,当cpu是4核以上速度该缺点弱化
2无法处理浮动垃圾,由于清理是并发进行,所以清理是也会产生垃圾,所以需要预制一段内存来让存储信息,如果预制内存不够将会导致回收失败,同时启动预备的Serial Old收集器收集老年代,而这个耗时较久
3采用标记清除算法,产生内存碎片多,而当内存碎片多到无法分配对象时,会进行一次内存整理,耗时较久

7G1收集器

技术最前沿;面向服务端应用的垃圾收集器
特点:并行并发缩短停顿,分代收集:可独立管理整个GC堆,采用标记整理算法,可预测停顿时间,将整个堆划分成多个独立区域(Region),不隔离新生代和老年代;对Region分配垃圾堆积价值,值越大,越优先回收
过程:初始标记,并发标记,最终标记,筛选回收
与cms不同的是最终标记也是并发的

相关文章

  • 4.HotSpot虚拟机内存回收的几点算法实现

    概述 介绍HotSpot虚拟机在实现内存回收算法中几点具体的实现。 枚举根节点 在实现可达性算法时,HotSpot...

  • 2018-04-28 HotSpot中的回收算法实现

    对象的产生流程: new 一个对象,编译通过,从新生代eden(见复制算法)分配内存,没被回收进入Survivor...

  • 理解jvm(二)--垃圾回收

    jvm经过多年的发展,它的垃圾回收算法也经过了几个迭代。本文主要介绍垃圾回收算法及目前hotspot上实现的垃圾回...

  • 垃圾收集器与内存分配策略 -- HotSpot的算法实现

    之前我们介绍了如何判断对象是否存活,并进行垃圾回收时相关的算法实现。我们根据这些来谈谈在HotSpot中对这些算法...

  • 深入理解 Java 虚拟机读书笔记3

    垃圾回收器 基于垃圾回收算法理论,不同的虚拟机会有不同的实现,以下仅就 HotSpot 虚拟机进行的分类: Ser...

  • JVM垃圾收集器

    如果说收集算法是内存回收的方法论,那么垃圾收集器则是内存回收的具体实现,Hotspot虚拟机的所有收集器如下如: ...

  • GC垃圾收集器

    垃圾算法是内存回收的方法论,垃圾收集器是内存回收的具体实现。HotSpot虚拟机的垃圾收集器.png注:连续表示可...

  • JVM学习之HotSpot虚拟机中的垃圾收集器

    垃圾收集器 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。下面是Hotspot 虚拟机包...

  • G1垃圾回收器详解

    在前一篇的文章《HotSpot垃圾回收算法概述》里面,对于Serial, Parallel和CMS几种垃圾回收器做...

  • 新生/老年/永久代

    当代主流虚拟机(Hotspot VM)的垃圾回收都采用“分代回收”的算法。“分代回收”是基于这样一个事实:对象的生...

网友评论

      本文标题:2018-04-28 HotSpot中的回收算法实现

      本文链接:https://www.haomeiwen.com/subject/tcjilftx.html