一个简单的垃圾回收机制要求与算法

原创 2005年05月23日 02:04:00

垃圾回收机制算法的要求:

1.与内建的与C++手工提供的方法共存  Coexist with the built-in, manual method provided by C++.

 

 

2.不要对现有的代码与习惯造成破坏   Not break any preexisting code. Moreover, it must have no impact whatsoever on existing code.

 

 

3.有透明性,与不使用垃圾回收机制的解决方案一样  Work transparently so that allocations that use garbage collection are operated on in the same way as those that don’t.

 

 

4.在语法上与new表达式一样  Allocate memory using new in the same way that C++’s built-in approach does

5.对所有对象都有效   Work with all data types, including the built-in types such as int and double.

6.易于使用   Be simple to use

In short, the garbage collection system must be able to dynamically allocate memory using a mechanism and syntax that closely resemble that already used by C++ and not affect existing code. At first thought, this might seem to be a daunting task, but it isn’t.

 

 

垃圾回收机制的算法

1引用记数法

为每个C++动态分配的内存都增加一个引用计数器,这个计数器在对内存引用增加的时候加1,在取消对内存引用的时候减1.当然实现与效率是很可观的,但是请注意循环引用的特殊情况:当两个对象互相指向对方的时候.呵呵,永远不会释放了.当然也就Memory Leak.

2标记并清除

开始阶段,所有堆中空间都是标记为未使用状态,然后标记所有被引用无论直接或者间接为使用状态.第二阶段,扫描所有已经分配的内存并释放未标记的空间.这个办法解决了循环引用问题,但是扫描整个堆带来的是效率的低下.

 

 

我们实现垃圾回收机制的算法

引用记数法,当为了解决循环引用的问题,我们在整个程序退出的时候会释放全部动态分配的内存.

我们必须为动态分配对象维护一个引用记数的链表;必须跟踪所有指针运算符,当有某个指针指向动态分配的对象时候,要将该对象的计数器加1;必须回收那些计数器为0的对象内存

所以我们必须构造一个新类型,一个指向动态分配对象的指针类型.当需要垃圾回收机制,我们可以使用这个类型的指针,不需要的时候,我们可以使用普通指针.

 

 

我们什么时候需要它来回收垃圾??

利用多线程的OS环境下我们可以在后台自动执行回收机制,单线程环境下呢?频繁的回收会导致效率的低下,我们应该在内存持续降低的情况下来使用垃圾回收机制.

 

 

关于auto_ptr

Auto_ptrISO C++所谓的严格所有权的一个指针类型,它在我们的垃圾回收机制下毫无用处.

版权声明:本文为博主原创文章,未经博主允许不得转载。

GC垃圾回收机制

  • 2014年12月19日 14:53
  • 181KB
  • 下载

java垃圾回收机制

  • 2016年06月19日 07:57
  • 14KB
  • 下载

PHP垃圾回收机制简单说明

最近有看到一份面试题目,内容大概为阐述PHP的垃圾回收机制是怎么一回事。虽然自己也是PHP的学习者,但之前还真没怎么了解PHP内部的垃圾回收流程,只是在我们的代码中用了unset,null,mysql...

Java垃圾回收机制详解

  • 2011年11月19日 14:33
  • 199KB
  • 下载

Java垃圾回收机制

  • 2013年06月17日 01:07
  • 63KB
  • 下载

JVM-垃圾回收机制算法简述

Java虚拟机的垃圾回收算法

Java垃圾回收机制的学习和使用

  • 2011年07月27日 10:54
  • 26KB
  • 下载

JVM垃圾回收机制算法总结

本文系转载,原文地址:http://blog.csdn.net/willfcareer/archive/2010/08/23/5833082.aspx Java虚拟机垃圾收集器分析 1 、活动对象...
  • FG2006
  • FG2006
  • 2011年08月21日 12:41
  • 1137

c++ 垃圾回收机制

  • 2008年09月28日 21:34
  • 181KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个简单的垃圾回收机制要求与算法
举报原因:
原因补充:

(最多只允许输入30个字)