①首先说一下,GC里边在JVM其中是使用的ROOT算法,ROOT算法,什么称作为ROOT呢,就是说类的静态成员,静态成员就是static修饰的那种,是“根”的一个,根还包含方法中的成员变量。仅仅有成员或对象不挂在根上,GC的时候就可能把他们搞掉,这里提到的循环引用,就看这个循环引用是否挂在根上,假设挂在根上。假设这个根还被JVM的Java代码所运行的话,就不会GC掉,假设说这个根已经被释放掉了。这个对象不挂在跟上了。那个这个对象就会被GC掉。

②说一下根搜索算法,ROOTS,这个算法,那些在Java里会被觉得是根呢,在我印象里通常是static修饰的类成员,比方说静态字段,这样的字段引用的对象被称为根。仅仅要类在POOL区里不被卸载。一直在堆里,类对象仅仅要没被回收掉,他引用的对象就不会被GC。

③再说还有一种情况。方法中的栈,栈中有他的栈成员 Integer  a = XXX,当方法没有被释放。没有出栈的时候,方法没有被弹出的时候,那Integer a 所引用的对象也是不会被回收的,在什么情况下回收呢,就是这个对象没有挂在根上。就会被回收。

④我们回到标题的问题,这个循环引用是否被回收,就看这个循环引用是否挂在根上,A引用B,B引用A,A和B并没有挂在某个内存元和根上,当他们的生命周期结束的时候。这两个对象都有可能被回收。

⑥详细回收的机制,就比較复杂了。每次GC的时候。对要被回收的对象标记一次。比方说会有个计数器每次+1,+1,+1。每次GC的时候就+1一次。当对象达到默认值了。比方说好像15次吧,在新生带创建的对象达到15次了就会被达到老年带里去,而老年代对象的回收的频率和新生带回收的频率是不一样的,能够细致看下图中pool里的分区。了解他们的执行机制。

注:JVM heap分区块

Generation代

- YongGeneration/NewGeneration:新生代。在Eden/S0/S1的存活的对象。

- OldGeneration:老年代。在Tenured区存活的对象。

- PermanentGeneration:永久代。

Space 区

- Eden:伊甸园区。是新生代的一个区。

- Survivor:幸存区,属于新生代,为了复制算法的须要。一般分成大小相等的两个区(S0/S1或者From/To)。

- Tenured:存放老年代的区域。

- Permanent:终身区。

下图:Hotspot 的 Heap 分区

java gc 循环引用_JVM(3)对象A和B循环引用,最后会不会不被GC回收?-------关于Java的GC机制...相关推荐

  1. java 确定对象的引用_JVM学习笔记之了解对象存活判断和4种引用【三】

    垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还"存活"着,哪些已经"死去" 一.对象存活判断 1.1 引用计数算法(Reference Co ...

  2. Java基础之父类引用指向子类对象

    多态(Polymorphism) 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作,如图所示, 多态的有点 消除类型之间的耦合关系 可替换性 可扩充 ...

  3. java计算list集合中重复对象的次数及for循环内外创建对象

    2019独角兽企业重金招聘Python工程师标准>>> 我的需求:计算字符串集合中"数值"出现的次数,然后在for循环中计算"数值"及出现的次 ...

  4. [转载] 一文彻底搞懂父类引用指向子类对象问题

    参考链接: 用子类引用子类对象 vs 父类引用 public class Father { private String name; private int age; private int weig ...

  5. 父类引用指向子类对象的方法调用问题

    阅读如下代码,结果是什么? public class Person {String name = "person";public void shout(){System.out.p ...

  6. java中一直gc_如果JVM在执行GC时一直在移动对象,那么它如何解析引用?

    小编典典 如果您真的对垃圾收集器的工作方式感兴趣,我可以推荐理查德·琼斯的两本有关垃圾收集的书.链接/参考在这里.这不是专门关于Java垃圾收集的. (我有一本旧书的副本,而新书在我的购物清单上.) ...

  7. 【Java 虚拟机原理】垃圾回收算法 ( Java 虚拟机内存分区 | 垃圾回收机制 | 引用计数器算法 | 引用计数循环引用弊端 )

    文章目录 一.Java 虚拟机内存分区 二.垃圾回收机制 三.引用计数器算法 ( 无法解决循环引用问题 ) 一.Java 虚拟机内存分区 Java 虚拟机内存分区 : 所有线程共有的内存区域 : 堆 ...

  8. 53.垃圾回收算法的实现原理、启动Java垃圾回收、Java垃圾回收过程、垃圾回收中实例的终结、对象什么时候符合垃圾回收的条件、GC Scope 示例程序、GC OutOfMemoryError的示例

    53.垃圾回收算法的实现原理 53.1.目录 53.2.启动Java垃圾回收 53.3.Java垃圾回收过程 53.4.垃圾回收中实例的终结 53.5.对象什么时候符合垃圾回收的条件? 53.5.1. ...

  9. java判断对象已死_JVM判断对象已死亡?

    设计与实现以jvm为例+高级虚拟机 244.5元 (需用券) 去购买 > 本节常见面试题 如何判断对象是否死亡(两种方法). 简单的介绍一下强引用.软引用.弱引用.虚引用(虚引用与软引用和弱引用 ...

最新文章

  1. 今天安装VisualSVN 不小心删掉了安装目录,再次安装 修改 移除提示UninstallWMISchemaExecute (0x8004401e) when updating VisualSV
  2. love2d--glsl03噪声
  3. [Android Pro] 分析 Package manager has died
  4. 【Network Security!】网络安全常用术语
  5. 【数字信号处理】线性时不变系统 LTI “ 输入 “ 与 “ 输出 “ 之间的关系 ( 周期性分析 | 卷积运算规律 | 交换律 | 结合律 | 分配率 | 冲击不变性 )
  6. laravel中及其常用的一些函数方法(自己看)和技巧(不断添加中)
  7. 【每日一包0029】merge-descriptors
  8. 算法练习-002-返回一个set数组
  9. html中searchbutton点击没有反应,点击按钮加载完整的HTML后,使用Selenium加载其他元素...
  10. group by用法 mysql_MYSQL GROUP BY用法详解
  11. 怎么保存php格式,把php代码保存到php文件实现方法
  12. linux qemu原理,最全的剖析QEMU原理的文章3
  13. php mysql修改表单数据_表单修改数据
  14. 统计学中常用的数据分析方法汇总
  15. 如何将网页保存为PDF文件
  16. 高考自主招生招生基本问题,你需要吗?
  17. 字谜游戏(b)C语言
  18. 小白入门Python Web开发介绍(持续更新)
  19. 用计算机发送电子邮件,用英语解释一下发送电子邮件的过程 用计算机语言来说一下,大概400到500个英文单词...
  20. JavaEE | 基本类型包装类

热门文章

  1. opencv获取mat的指针_数字图像处理之opencv中Mat数据操作
  2. OJ1043: 最大值(C语言)
  3. 信息学奥赛一本通 1101:不定方程求解 | OpenJudge NOI 2.1 7650 | 小学奥数 7650
  4. 信息学奥赛一本通(1262:【例9.6】挖地雷)
  5. 信息学奥赛一本通(1233:接水问题)
  6. 信息学奥赛一本通(1018:其他数据类型存储空间大小)
  7. 小木棍(洛谷-P1120)
  8. 信息学奥赛C++语言:上课的人数
  9. 22 SD配置-主数据-定义付款条款
  10. 4 SD配置-企业结构-定义-定义销售办公室