Java 内存回收机制(一)

本文探讨了Java内存回收机制中的对象可回收性判断方法,包括引用计数器算法及其局限性,以及主流的可达性分析算法的具体实现过程。

    与C/C++相比,Java的内存回收机制,无疑极大的方便了程序员的开发工作。下面我对Java内存回收机制的一些理解,欢迎大家一起来讨论一下。

   一、如何判断一个对象是否可回收。

        判断一个对象是否可回收实际上就是就是判断是否还有引用指向该对象的实际数据。常用的判断方法主要有:1、引用计数器法,2、可达性分析算法。

       1、引用计数器算法

        其算法具体实现过程如下:每个对象维护一个引用计数器,每当有一个地方引用到它时,计数器值加1,当引用失效时,计数器值减一。任何时刻计数器为零的对象,就当做不可使用对象。

        采用引用计数器算法其实现上比较简单,执行效率也比较高。但是不能解决循环引用的问题。

        例如存在着两个对象ObjA与objB,并且在这两个对象中,都存在一个Instance字段。将其赋值如下:ObjA.instance=objB ;objB.instance=objA;

假设此时这两个对象再无其他引用,但是由于他们相互引用对方,导致引用计数值都不为零,此时引用计数器无法通知GC回收他们。


      2、可达性分析算法

         基本上在主流的商用开发语言中,垃圾回收机制都采用的是可达性分析算法。Java的可达性分析算法如下:

        算法的起点为一个GC Root对象;GC root对象主要是指虚拟机栈中的引用对象,方法区的静态属性引用对象常量引用对象。本地方法区的饮用对象。(关于Java内存分区详见参考Java 虚拟机内存)

       可达性分析算法: 从GC root节点开始向下搜索,其搜索路径称为引用链,当一个对象到GC root不包含任何引用链时,就称该对象不可达。不可达的对象就是可回收对象。

      







  

        

    

「LLM那些事」系列第 4 篇《上下文窗口的边界》,文章连接:https://blog.csdn.net/houwenjin/article/details/163999753。 演示什么:在「预测」Sheet 的黄色格子里输入句话(默认「来泡杯」),四个「模型」——分别只统计最后 1 / 2 / 3 / 4 个字的 n-gram 查表——同时预测下个字。同个输入,看的上下文越长,候选越少、预测越确定: ┌────────────────┬──────────┬───────────────┬──────┐ │ 只看最后几个字 │ 用的前缀 │ 候选下字数 │ 预测 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 1 个 │ 杯 │ 3(茶/子/水) │ 模糊 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 2 个 │ 杯 │ 2(茶/水) │ 收窄 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 3 个 │ 泡杯 │ 1(茶) │ 确定 │ ├────────────────┼──────────┼───────────────┼──────┤ │ 4 个 │ 来泡杯 │ 1(茶) │ 确定 │ └────────────────┴──────────┴───────────────┴──────┘
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值