【jvm】垃圾判别阶段算法

打印 上一主题 下一主题

主题 995|帖子 995|积分 2985

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. 说明



  • 1.JVM主要使用两种垃圾判别算法:引用计数算法可达性分析算法
2. 引用计数算法



  • 1.原理:为每个对象维护一个引用计数器,每当有地方引用该对象时,计数器加1;当引用失效时,计数器减1。当计数器的值为0时,表现该对象不再被引用,可以被回收。
  • 2.长处:实现简单,判断服从高,回收没有延迟性。
  • 3.缺点:无法解决循环引用题目,即两个或多个对象相互引用,导致它们的引用计数器都不为0,从而无法被回收。因此,JVM在实际应用中并未广泛采用此算法。
2. 可达性分析算法



  • 1.原理:从GC Roots(一组必须活跃的引用)出发,通过引用链搜索全部可达的对象。假如某个对象到GC Roots没有任何引用链相连,则该对象被视为不可达,即垃圾对象。
  • 2.GC Roots的构成:捏造机栈(栈帧中的当地变量表)中引用的对象、方法区中类静态属性引用的对象、方法区中常量引用的对象、当地方法栈中JNI(Native方法)引用的对象等。
  • 3.长处:实现简单且执行高效,更重要的是能够有效地解决循环引用题目,防止内存泄漏。
  • 4.应用:JVM广泛采用可达性分析算法来判断垃圾对象。
3. 垃圾判别阶段的过程



  • 1.暂停应用线程:为了进行垃圾判别和回收,JVM必要暂停全部的应用线程,以防止在垃圾回收过程中对象的状态发生变化。这个过程通常被称为“Stop The World”(STW)。
  • 2.标志存活对象:JVM从GC Roots出发,通过可达性分析算法标志全部可达的对象。这些对象被视为存活对象,不会被回收。
  • 3.扫除垃圾对象:在标志完存活对象后,JVM会扫除全部未被标志的对象。这些对象被视为垃圾对象,其占用的内存空间将被回收。
  • 4.恢复应用线程:完成垃圾回收后,JVM会恢复全部被暂停的应用线程,使它们继续执行。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用户国营

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表