模拟自动回收内存机制(有向图多点可达性)

之前写过一篇边界标识内存管理算法,在分配内存端,分配算法没问题,有很多种,首次适应、最佳适应、最坏适应法等,分配的时机,看用户什么时候申请。在回收端,回收情况分很四种:左/右临界区为空闲块、左右临界区均为空闲块和左右临界区均不为空,根据不同的情况,空闲块回收的方法也不同。那么回收的时机呢?在C语言中,我们要显式地使用free()来回收不再使用的内存,在Java里,我们不需要这么做,自动回收机制会帮我们这么做,它又是怎么实现的呢?它怎么知道当前哪些对象不被使用,哪些对象可以被回收了呢?

在程序执行过程中,很多对象的引用和变量的使用,我们随时都可以访问到这些对象,而对于那些不能被直接访问到的对象,就应该被回收,以释放内存给新的对象使用。那么怎么知道哪些对象能被直接访问到,哪些对象不能被访问?我们看,对象的引用就像指针,把对象看做一个顶点,一个对象对另一个对象的应用看作一个箭头相连,那么多个对象之间的引用关系就构成了一个有向图。

在有向图中,一个顶点可以到达另一个顶点,那么就认为这两个顶点是连通的,就像一个对象可以直接或间接地访问到另一个对象。遍历有向图,找出所有不能被访问的顶点,然后把它们回收,实际的内存管理中回收机制也是这样的,一个顶点表示一个对象,对象之间的引用表示一条边,至于寻找图中无法被访问的顶点,那就是用到有向图中顶点可达性的寻找方法。给定的某一个顶点或是一组顶点,在图中遍历寻找所有从

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值