jvm gc,gc算法

如前一篇文章中所述,HotSpot JVM中有四个可用的垃圾收集器。 它们之间有一些显着差异,但是用于完成实际工作的算法背后的实际概念非常相似。 在这篇简短的文章中,我将尝试解释三种基本算法:

  • 打标
  • 打标紧凑
  • 标记复制

GC根

在进入细节之前,请确保我们对什么是GC根有一个共识。 这些是可以从堆外部直接访问的对象。 例如:

  • 活动线程
  • 静态变量
  • 局部变量(可通过线程堆栈访问)
  • JNI参考

标记

讨论的所有算法都具有相同的标记阶段。 标记阶段是从GC根开始遍历整个对象图。 当GC访问该对象时,它将其标记为可访问并因此处于活动状态。 从GC根无法访问的所有对象都是垃圾。 标记需要暂停(STW)暂停,因为正在运行的应用程序线程可能会干扰。 STW暂停的时间长短主要取决于访问对象的数量。

打标

在标记阶段之后,我们拥有了已访问(可通过GC根访问)和未访问对象占用的内存空间。 扫描阶段将释放包含无法访问对象的内存片段。 这很简单,但是由于死对象不一定彼此相邻,因此最终导致内存碎片化。 这本身还不错,但是尝试将太大的对象放入内存中可能导致OutOfMemoryError 。

打标紧凑

该算法解决了内存碎片的问题。 标记所有活动对象后,它们将移到内存空间的开头。 这有助于避免由于内存碎片过多而导致的OutOfMemoryError ,但是压缩堆并不是免费的。 复制对象和更新对它们的所有引用都需要时间,并且所有操作都在STW暂停期间发生。

标记复制

标记复制算法将所有活动对象复制到新的内存区域。 先前占用的区域被认为是空闲的。 下次执行标记复制时,所有活动对象都移回到上一个存储区。 您可以想象,这当然会导致内存压缩。 不幸的是,它需要额外的额外区域,该区域必须足够大以适合任何给定时间点的所有活动对象。

翻译自: https://www.javacodegeeks.com/2017/09/gc-explained-algorithms.html

jvm gc,gc算法

jvm gc,gc算法_GC解释:算法相关推荐

  1. gc垃圾收集器 与gc算法_GC解释:收集器概述

    gc垃圾收集器 与gc算法 当前版本的HotSpot JVM包括三种类型的垃圾收集器: –串行收集器 –并行收集器 –多数同时收集者 它们都是世代的,这意味着它们利用了堆的划分方式 . 垃圾收集器负责 ...

  2. gc 堆外_GC解释:堆

    gc 堆外 世代垃圾收集器 JVM堆分为两个不同的世代. 一种称为"年轻",第二种称为"老"(有时称为终身制). 年轻一代又分为两个主要的逻辑部分:伊甸园和幸存 ...

  3. JVM的GC回收算法、GC收集器以及内存分配策略

    目录 •写在前面 •标记-清除算法 •复制算法 •标记-整理算法 •HotSpot上的算法实现保障 •GC收集器 •内存分配策略 •写在前面 JVM的垃圾回收算法.收集器以及内存分配策略放在一起了解和 ...

  4. java 内存 开发 经验_七年开发经验详解JVM的GC 算法

    概述 GC 是 JVM 自带的功能,它能够自动回收对象,清理内存,这是 Java 语言的一大优势,但是GC绝不仅伴随着Java,相反,GC历史比Java更悠久.关于GC,我认为有四个问题需要解决: 为 ...

  5. 面试篇之JVM(GC 可达性分析 回收算法 卡表 G1)

    面试篇之JVM 面试篇之JVM GC 对象存活判断 分代回收理论 常见回收算法 HotSpot实现细节 记忆集与卡表 读写屏障 回收器 并发标记 G1 面试篇之JVM GC 美团 1.JVM怎么判断一 ...

  6. 深入理解JVM(2)——GC算法与内存分配策略

    说起垃圾收集(Garbage Collection, GC),想必大家都不陌生,它是JVM实现里非常重要的一环,JVM成熟的内存动态分配与回收技术使Java(当然还有其他运行在JVM上的语言,如Sca ...

  7. 根可达算法的根_好屌好屌的「GC系列」JVM垃圾定位及垃圾回收算法浅析

    0x01 什么是垃圾 很简单,没有引用指向的任何对象都叫做垃圾(garbage). 什么是garbage 在某一内存空间中,Java程序制造了很多对象被引用,有的对象还引用别的对象,中途有对象不被需要 ...

  8. JVM(3)之垃圾回收(GC垃圾收集器+垃圾回收算法+安全点+记忆集与卡表+并发可达性分析......)

    <深入理解java虚拟机>+宋红康老师+阳哥大厂面试题2总结整理 一.堆的结构组成 堆位于运行时数据区中是线程共享的.一个进程对应一个jvm实例.一个jvm实例对应一个运行时数据区.一个运 ...

  9. Java-JVM虚拟机内存垃圾回收机制gc入门:引用类型,对象标记算法,回收算法,常见的 garbage collector

    文章目录 GC的优缺点 引用的四种类型 对象标记算法 引用计数法 可达性分析法 回收算法 标记-清除算法(Mark-Sweep) 复制算法 标记-整理算法(Mark-Compact) 分代收集算法 常 ...

最新文章

  1. C - Heavy Transportation POJ - 1797
  2. Bioinformatics:吉林大学刘富组-深度学习从宏基因组序列中识别短病毒序列Virtifier...
  3. NR 5G 网络功能之AMF
  4. CCNA 配置试验之一 静态路由
  5. 百雀羚、林清轩、逐本走红背后,植物基护肤品的春天来了?
  6. 8086汇编寄存器及指令汇总
  7. 这6部超经典的物理电影,居然还有人没有看过?
  8. Android 小項目之---Iphone拖动图片特效 (附源码)
  9. python按照区间长度给定不同数量的随机数
  10. 【X264系列】之不同强度的printf
  11. Eclipse中配置约束(DTD,XSD)
  12. Linux的shell中echo改变输出显示样式
  13. java 数据库实现源锁_采用java和数据库两种方式进行加锁
  14. English--动词时态
  15. 开发代码质量衡量标准
  16. 自动删除QQ空间指定好友的留言
  17. 张飞流水账:超级搞笑诠释人生哲理
  18. java输出格林威治时间_Java之格林威治时间格式转换成北京时间格式
  19. linux系统裁剪扩充原理,Linux入门之系统内核原理之初级系统裁剪----“我的系统我做主”...
  20. 我们无法创建新的分区,也找不到现有的分区。有关详细信息,请参阅安装日志文件的解决方法

热门文章

  1. P4430-小猴打架【perfer序列】
  2. CF1260C-Infinite Fence【结论题】
  3. USACO2.1【bfs,排序,贪心,dfs,位运算】
  4. P1516-青蛙的约会【扩欧,同余方程】
  5. 2018-2019 ACM-ICPC, Asia Seoul Regional Contest——A - Circuits
  6. 【二分】数列分段(ybtoj 二分-1-1)
  7. 汇编语言(十五)之找出两个数组中的相同元素
  8. Spring 事务原理和使用
  9. Java开发必须掌握的8种网站攻防技术
  10. 避免代码冗余,使用接口和泛型重构Java代码