如何确定垃圾:
1.引用计数法
在 Java 中,引用和对象是有关联的。如果要操作对象则必须用引用进行。因此,很显然一个简单
的办法是通过引用计数来判断一个对象是否可以回收。简单说,即一个对象如果没有任何与之关
联的引用,即他们的引用计数都为 0,则说明对象不太可能再被用到,那么这个对象就是可回收
对象。

2.可达性分析
为了解决引用计数法的循环引用问题,Java 使用了可达性分析的方法。通过一系列的“GC roots”
对象作为起点搜索。如果在“GC roots”和一个对象之间没有可达路径,则称该对象是不可达的。

要注意的是,不可达对象不等价于可回收对象,不可达对象变为可回收对象至少要经过两次标记
过程。两次标记后仍然是可回收对象,则将面临回收

标记清除算法( Mark-Sweep )

最基础的垃圾回收算法,分为两个阶段,标记和清除。标记阶段标记出所有需要回收的对象,清
除阶段回收被标记的对象所占用的空间。

从图中我们就可以发现,该算法最大的问题是内存碎片化严重,后续可能发生大对象不能找到可
利用空间的问题。

复制算法(copying)

为了解决 Mark-Sweep 算法内存碎片化的缺陷而被提出的算法。按内存容量将内存划分为等大小
的两块。每次只使用其中一块,当这一块内存满后将尚存活的对象复制到另一块上去,把已使用
的内存清掉,如图

这种算法虽然实现简单,内存效率高,不易产生碎片,但是最大的问题是可用内存被压缩到了原
本的一半。且存活对象增多的话,Copying 算法的效率会大大降低。

标记整理算法(Mark-Compact)

结合了以上两个算法,为了避免缺陷而提出。标记阶段和 Mark-Sweep 算法相同,标记后不是清
理对象,而是将存活对象移向内存的一端。然后清除端边界外的对象。如图:

分代收集算法:
分代收集法是目前大部分 JVM 所采用的方法,其核心思想是根据对象存活的不同生命周期将内存
划分为不同的域,一般情况下将 GC 堆划分为老生代(Tenured/Old Generation)和新生代(Young
Generation)。老生代的特点是每次垃圾回收时只有少量对象需要被回收,新生代的特点是每次垃
圾回收时都有大量垃圾需要被回收,因此可以根据不同区域选择不同的算法。

JAVA 垃圾回收相关推荐

  1. 假期三天,我肝了万字的Java垃圾回收,看完你还敢说不会?

    大家好,我是狂聊,上一篇已经把 Jvm 的运行区数据和类加载机制聊完了. 今天来说说 Java 垃圾回收,高频面试问题. 提纲附上,话不多说,直接干货 1.什么是垃圾回收? 垃圾回收(Garbage ...

  2. java垃圾回收机制_笔记 | Java垃圾回收机制

    本文经授权转载自程序员杂货铺(ID:speakFramework) 垃圾回收 最近上海的小伙伴是不是要被强垃圾分类搞疯了???哈哈哈哈 上海是个走在前列的城市啊,不光骑自行车闯红灯要被罚钱,垃圾不分类 ...

  3. 细述 Java垃圾回收机制→Types of Java Garbage Collectors

    本文将会介绍各种不同类型的Java垃圾回收器.垃圾回收是Java用来将程序员从分配和释放内存的琐事中解放出来的自动过程. Java有四种类型的垃圾回收器, Serial Garbage Collect ...

  4. 细述 Java垃圾回收机制→Java Garbage Collection Monitoring and Analysis

    本文非原创,翻译自Java Garbage Collection Monitoring and Analysis 在Java中为对象分配和释放内存空间都是由垃圾回收线程自动执行完成的.和C语言不一样的 ...

  5. Java垃圾回收工作原理

    在C++中,在heap上分配对象比在stack上分配对象更加昂贵.程序需要找到合适的内存块,再返回内存的地址.但是在Java中垃圾回收器显著地提高了在heap上分配对象的速度.听起来会有些怪,但是这就 ...

  6. Java 垃圾回收机 GC Roots详解(Garbage Collection Roots)

    背景: 之前面试阿里支付宝,被问到常见的GC Root 是什么? 当时自己支支吾吾,明明自己看过深入理解Java 虚拟机这本书,但是就是回答不上来. 后来自己工作中,遇到内存泄漏问题.我百度,下载了M ...

  7. Java垃圾回收机制(Garbage Collection)

    引用博客地址:http://www.cnblogs.com/ywl925/p/3925637.html 以下两篇博客综合描述Java垃圾回收机制 第一篇:说的比较多,但是不详细 http://www. ...

  8. java垃圾回收机制串行_Java垃圾回收机制

    Java语言是一门自动内存管理的语言,不再需要的对象可以通过垃圾回收自动进行内存释放. Java运行时内存区域划分 JVM将Java程序运行时内存区域划分成以下几个部分: 程序计数器(Program ...

  9. java垃圾回收机制_JVM的垃圾回收机制——垃圾回收算法

    一.Java垃圾回收机制 在java中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行.在JVM中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者 ...

  10. java垃圾回收根对象_Java垃圾回收怎么理解?

    展开全部 Java的堆是一个运行时数据区,类的实例(对象)从中62616964757a686964616fe58685e5aeb931333339653664分配空间.Java虚拟机(JVM)的堆中储 ...

最新文章

  1. Fedora安装Texlive2013时出现Can't locate Digest/MD5.pm的解决方法
  2. 2021-02-21 Python Easyocr 图片文字识别
  3. 关于Git的几个使用技巧
  4. 听说蒂姆·库克来了?这和我们有什么关系!
  5. 贷款中介市场要变天了吗?
  6. Unity SRP自定义渲染管线 -- 4.Spotlight Shadows
  7. CF1338D:Nested Rubber Bands(树形dp)
  8. 时间小知识对于时间转换可能有帮助
  9. webusercontrol ajax,ASP.NET页面使用AjaxPro2完成JS调用后台方法
  10. flutter AndroidView简述
  11. 山东女子学院计算机专业分数线,山东女子学院2020年山东省本科专业录取分数统计(含位次)...
  12. 多GPU环境运行实验的一点经验
  13. ic和mos怎么区分_快速掌握MOS管源极和漏极的区别!看了受益匪浅!
  14. 串口数据接收、发送与USB转串口驱动下载
  15. Kali利用Redis未授权漏洞入侵服务器
  16. 智能代还行业怎么样?合法吗?代还APP开发靠谱吗?
  17. 【单片机毕业设计】【mcuclub-jj-015】基于单片机的风扇的设计
  18. c语言流星雨程序下载,c语言 流星雨的实现.doc
  19. 从脚本学python(秋名山车神)
  20. Hamming Embedding 汉明嵌入

热门文章

  1. windows双系统如何删除ubuntu系统并重装
  2. OpenPlanner变道遇到的问题及解决
  3. 计算机网络 交换机工作原理
  4. 微信小程序中数字取整
  5. adb操作提示Read-only file system问题
  6. 统一网关Gateway-搭建网关服务
  7. 单片机低功耗配置及注意事项
  8. 2020最实用115个Java面试题及面向对象的能力汇总合集
  9. SQL查询语句(从单表到多表、从简单到复杂)
  10. Filament介绍