开发者社区> 小威要向诸佬学习呀> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

引用计数法的优点

简介: 引用计数法的优点
+关注继续查看

引用计数法的应用场景:
• 建议不要用
4.4.2 可达性分析法

  1. 该种方法是从GC Roots开始向下搜索,搜索所走过的路径为引用链。当一个对象到GC Roots没用任何引用链时,则证明此对象是不可用的,表示可以回收。

上图上图中Object1、Object2、Object3、Object4、Object5到GC Roots是可达的,表示它们是有引用的对象,是存活的对象不可以进行回收

Object6、Object7、Object8虽然是互相关联的,但是它们到GC Roots是不可达的,所以他们是可以进行回收的对象。

那些可以作为GC Roots 的对象:

1、虚拟机栈(栈帧中的本地变量表)中引用的对象;
2、方法区中类静态属于引用的对象;
3、方法区中常量引用的对象;
4、本地方法栈中JNI(即一般说的Native方法)引用的对象。

可达性算法的优点:

解决相互循环引用问题。
可达性算法的优点:

目前和引用计数法比没得缺点
可达性算法的应用场景:

这是目前主流的虚拟机都是采用的算法

4.5 垃圾回收机制策略(也称为GC的算法)
4.5.1 引用计数算法(Reference counting)
每个对象在创建的时候,就给这个对象绑定一个计数器。每当有一个引用指向该对象时,计数器加一;每当有一个指向它的引用被删除时,计数器减一。这样,当没有引用指向该对象时,计数器为0就代表该对象死亡,这时就应该对这个对象进行垃圾回收操作。

引用计数法的优点:

引用计数算法的实现简单,判定效率也很高。
引用计数法的缺点:

主流的Java虚拟机里面没有选用引用计数算法来管理内存,其中最主要的原因是它很难解决对象之间相互循环引用的问题。
例如:
package com.lijie;

public class Test {

public Object object = null;
public static void main(String[] args) {
    Test a = new Test();
    Test b = new Test();
    /**
     * 循环引用,此时引用计数器法失效
     */
    a.object = b;
    b.object = a;

    a = null;
    b = null;
}

}

引用计数法的应用场景:

建议不要用

4.5.2 标记–清除算法(Mark-Sweep)
为每个对象存储一个标记位,记录对象的状态(活着或是死亡)。
分为两个阶段,一个是标记阶段,这个阶段内,为每个对象更新标记位,检查对象是否死亡;第二个阶段是清除阶段,该阶段对死亡的对象进行清除,执行 GC 操作。

标记清除算法的优点:

是可以解决循环引用的问题
必要时才回收(内存不足时)
标记清除算法的缺点:

回收时,应用需要挂起,也就是stop the world。
标记和清除的效率不高,尤其是要扫描的对象比较多的时候
会造成内存碎片(会导致明明有内存空间,但是由于不连续,申请稍微大一些的对象无法做到),
标记清除算法的应用场景:

该算法一般应用于老年代,因为老年代的对象生命周期比较长。
4.5.3 标记–整理算法
标记清除算法和标记压缩算法非常相同,但是标记压缩算法在标记清除算法之上解决内存碎片化(有些人叫"标记整理算法"为"标记压缩算法")

标记-整理法是标记-清除法的一个改进版。同样,在标记阶段,该算法也将所有对象标记为存活和死亡两种状态;不同的是,在第二个阶段,该算法并没有直接对死亡的对象进行清理,而是将所有存活的对象整理一下,放到另一处空间,然后把剩下的所有对象全部清除。这样就达到了标记-整理的目的。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
2022 IDC数字化转型大奖颁布 阿里云数据库协助2家机构和企业获奖
近日,国际知名咨询机构IDC公布2022IDC中国未来企业大奖优秀案例,阿里云数据库协助居然之家和上海市新能源汽车公共数据采集与监测研究中心获得两项年度数字化转型大奖。
52 0
代码简化利器-行为参数化
在软件工程中,一个众所周知的问题就是,不管做什么,用户的需求肯定会变。比方说,有个应用程序是帮助农民了解自己的库存的。这位农民可能想有一个查找库存中所有绿色苹果的功能。但到了第二天,他可能会告诉你:“其实我还想找出所有重量超过150克的苹果。”又过了两天,农民又跑回来补充道:“要是我可以找出所有既是绿色,重量也超过150克的苹果,那就太棒了。”要如何应对这样不断变化的需求?理想的状态下,应该把工作量降到最少。此外,类似的新功能实现起来还应该很简单,而且易于长期维护。
21 0
带你读《6G重塑世界》第二章5G 加速社会的数字化转型2.2 5G 的全新能力(三)
《6G重塑世界》第二章5G 加速社会的数字化转型2.2 5G 的全新能力
52 0
阿里云刘伟光:成功的金融数字化转型,都绕不开这「三大定律」| 鲸犀峰会
数字化工作空间,开放平台,中台架构,智能化建设,无一不是机构必经之路。
253 0
如何在函数计算中实现无入侵全局网络代理
## 什么场合需要代理? 假设您有一台物理服务器部署在家里,你需要在函数计算中访问这台物理服务器。最简单的办法是直接暴露这个物理服务器到公网环境。那么问题来了,如果直接暴露到公网不设置防火墙,那么任何人都可以直接访问你的机器,这样会有很大风险。
1990 0
8月13日云栖精选夜读 | 阿里云首次发布数字化转型方法论,推动各行各业数字化转型
数字经济大潮来临 如何利用数字技术支持智能化转型? 曾经 阿里巴巴也经历过 数据信息孤立 资源浪费创新复用率低 传统IT架构无法满足高并发的互联网诉求 为了应对挑战,阿里巴巴也进行了诸多创新。其中就包括在2009年成立阿里云并自主研发大规模计算操作系统飞天。
2955 0
+关注
小威要向诸佬学习呀
每天保持进步就好
64
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载