一、可回收对象判定方法

识别方式有两种。一是,引用计数算法;二是,可达性分析。

第一种方法:引用计数算法。当一个对象被引用时,引用计数器加1,当引用失效时,引用计数器减1。当一个对象的引用次数为0时,表示这个对象是可以被回收的。这种方法的优点是快和简单,只要将所有对象遍历一遍便可,缺点是:如果对象之间存在循环引用,则无法回收。比如:对象A引用了B,B中也引用了A,如果除此之外没有任何对象引用了A和B,很显然AB是应该被回收的,但是此时两者的引用次数是1,这时,JVM无法对AB进行回收。

第二种方法:可达性分析。通过一系列被称为“gc roots”的对象作为起点,从这些节点开始向下进行搜索,搜索所走过的路径成为引用链。当一个对象到“gc roots”之间没有任何引用链相连时,则该对象是不可达的,也就是可以回收的。这种方式可以解决循环调用的问题,JVM中使用的是这种判定方法。

二、垃圾回收算法

垃圾回收算法有以下四种:

标记-清除算法;
复制算法;
标记-整理算法;
分代收集算法;

标记-清除算法分为“标记”和“清除”两个阶段,“标记”阶段将需要回收的对象标记出来,“清除”阶段回收被标记的对象。这是一种最基本的垃圾回收算法,后面很多种垃圾回收算法都是基于这种算法的不足改进而得到的。这种回收方法的缺点是回收之后会产生大量内存碎片,因为回收过程只是简单的释放掉被标记对象。内存碎片太多的话,当我们需要分配大内存对象时,无法找到连续的内存空间,以致分配内存失败。

复制算法将内存分成两半,一半使用(在用内存),一半不用(未用内存)。标记过程同上,只是在回收时,把在用内存中的未标记对象复制到未用内存中,然后把在用内存统一全部回收。这种方法不会产生内存碎片,但是相当于把内存容量减少了一半。在实际算法中,在用内存和未用内存往往不是对半分的,因为如果每次清理的时候,大部分对象都死了,只有少部分存活(实际上,下面的分代收集算法中的新生代就符合这样的特点),那么,未用内存只要很小就可以了。

标记-整理算法也是由标记-清除算法发展而来,只是“清除”之后,会把内存整理一遍,这样就没有碎片了。但是,这种算法要考虑一致性问题,就是整理的过程中,标记不能变动,这就相当于虚拟机要暂停,等待内存整理完毕再运行,而整理过程还是挺耗时的。但是,如果对象存活的时间很长,存活率很高,每次清理都只有少部分对象死亡(实际上,下面的分代收集算法中的老生代就符合这样的特点),那么,这种算法消耗的时间会大大减少。

分代收集算法,这是听得最多的一种算法了,就是将对象分为新生代和老生代,新生代对象的特点是存活时间短,存活率低,老生代刚好相反。根据新生代和老生代的特点,对新生代使用复制算法,对老生代使用标记整理算法。

JVM垃圾回收机制学习相关推荐

  1. jvm垃圾回收机制_JVM 垃圾回收机制之堆的分代回收

    JVM垃圾回收机制之堆的分代回收 前言 前文我们了解了Java的GC机制,对于堆中的对象,JVM采用引用计数和可达性分析两种算法来标记对象是否可以清除,本文中我们还会了解到JVM将对分成了不同的区域, ...

  2. 深入理解JVM—垃圾回收机制

    一.前言 明确垃圾收集器关注的部分:堆和方法区.着重学习如何确定哪些垃圾需要回收.垃圾回收算法以及GC触发条件. 二.如何确定哪些垃圾需要回收 1.引用计数算法 在对象中添加一个引用计数器,每当有一个 ...

  3. JVM垃圾回收机制(超级无敌认真好用,万字收藏篇!!!!)

    文章目录 JVM垃圾回收机制 1 判断对象是否存活的算法 1.1 引用计数器算法 1.2 可达性分析算法 2 对象的四种引用方式 2.1 强引用 2.2 软引用 2.3 弱引用 2.4 虚引用 3 垃 ...

  4. 2020最全JVM垃圾回收机制面试题整理,阿里面试官最爱问的都在这里了(附答案)

    前言 为什么需要垃圾回收 首先我们来聊聊为什么会需要垃圾回收,假设我们不进行垃圾回收会造成什么后果,我们举一个简单的例子 我们住在一个房子里面,我们每天都在里面生活,然后垃圾都丢在房子里面,又不打扫, ...

  5. 4、JVM垃圾回收机制、新生代的GC、GC(Minor GC、FullGC)、GC日志、JVM参数选项、元空间(笔记)

    4.JVM垃圾回收机制 4.1.新生代的GC 4.1.1.串行GC(SerialGC) 4.1.2.并行回收GC(Parallel Scavenge) 4.1.3.并行GC(ParNew) 4.2.G ...

  6. jvm对象从新生代到老年代_JVM内存管理、JVM垃圾回收机制、新生代、老年代以及永久代...

    内存模型 JVM运行时数据区由程序计数器.堆.虚拟机栈.本地方法栈.方法区部分组成,结构图如下所示. JVM内存结构由程序计数器.堆.栈.本地方法栈.方法区等部分组成,结构图如下所示: 1)程序计数器 ...

  7. JVM内存区域(Java内存区域)、JVM垃圾回收机制(GC)初探

    一.JVM内存区域(Java内存区域) 首先区分一下JVM内存区域(Java内存区域)和Java内存模型(JMM)的概念.Java线程之间的通信采用的是共享内存模型,这里提到的共享内存模型指的就是Ja ...

  8. JVM架构、JVM垃圾回收机制、垃圾回收算法、垃圾回收器、JMM(内存模型)

    0 JVM和Java的关系 JDK = JRE + Java开发工具(java,javac,javadoc,javap-) JRE = JVM + Java核心类库 即: JDK = JVM + Ja ...

  9. 2.JVM垃圾回收机制-什么时候回收内存

    在前面的文章中,我们介绍过JVM垃圾回收机制负责的是堆和方法区的内存. 参考:http://blog.csdn.net/u011983531/article/details/49227013 在本篇中 ...

最新文章

  1. ArcFace - 人脸识别
  2. SAP 客供料管理初探
  3. 我感觉ae比较难用,就是做这种画中画的视频,final cut pro真香
  4. sql2008 cet查询 所有层级_案例 | CET助力一汽实现动力设备系统智慧管理
  5. Redis(案例四:购物车实现案例-Hash数据)
  6. 莫侵残日噪,正在异乡听
  7. conda创建环境及激活环境失败问题
  8. Doris之Rollup 与查询
  9. RHEL 5基础篇—管理系统计划任务
  10. 基于RV1126平台imx291分析 --- 写在开始
  11. Ansys APDL的超声换能器的模态分析(更新中)
  12. 优化UE4性能 、减少DrawCall——材质中使用自定义基元数据
  13. asp.net form身份认证不定时认证失败的问题 排查
  14. 快手财报,广告、直播、电商齐头并进
  15. uniapp开发微信公众号网页-微信JSSDK使用
  16. 通过线程ID获得窗口句柄的方法
  17. 面试必备之volatile
  18. 公司局域网服务器设置不连外网 仅内网访问用设置
  19. 计算机主机与显示器的接口是,电脑显示器的接口有哪些类型和区别
  20. rem的布局原理(Marksheng)

热门文章

  1. Android recycleview使用详解,recycleview实现九宫格布局即横向排列,recycleview设置item占位数量大号item或小号item
  2. Android ViewPager指示器
  3. 1 微信公众号开发 服务器配置 有什么用
  4. Mac 生成SSH Key
  5. 计算机专业英语教程计算机硬件翻译,计算机专业英语教程第5版翻译
  6. 下拉框_教你封装 Element Tree 树状下拉框
  7. web学习1--web项目的WEB-INF目录
  8. 1007. Maximum Subsequence Sum (25)
  9. mysql 之jdbc idea版
  10. 【Makefile由浅入深完全学习记录8】条件判断语句