关于引用计数和GC的一点研究

由于服务端c++编程的内存管理的复杂性
和程序书写的复杂性,一般推荐使用引用计数和GC,
从效率上看引用计数的效率非常高,GC的效率比较低。
这里讨论一下主流的引用计数和GC

详细代码见

http://www.svnhost.cn/Project/Detail-4657.shtml


云计算引擎


一.引用计数
  1.引用计数的两个基本原则
    1.1 保证引用计数的加和减成对使用。
    1.2 引用计数从0开始当引用计数到0时回收内存

  2.引用计数的线程安全
    2.1 在增加和减少引用计数操作必须线程安全的。
    2.1 对于引用计数的复制,必须保证复制时是线程安全的。
 
  3.引用计数的优点和缺点
    3.1 优点
      3.1.1 运行速度快,编写代码简单。
      3.1.2 代码不复杂,可以有效的编程。
    3.2 缺点
      3.2.1 引用计数不能有效的解决 A->B  B->A 循环引用的问题,
            不能打破循环引用,从而会导致内存泄露,这时候就要GC登场。

二.普通GC方法

   1.GC的基本原则
      一句话原则,如果对象没有被外部直接或间接的引用,则这个对象要进行回收。
   2.一般方法
      2.1 GC要基于引用计数
      2.2 当计数由0变1时,要将对象加入GC器
      2.3 当计数有1变0时,要将对象从GC器中删除
      2.4 GC方法
        2.4.1 找到GC器中所有被指向的次数和当前引用不相等的对象
        2.4.2 统计对象所指向的所有的对象
        2.4.3 遍历所指向的对象
        2.4.4 直到这个对象指向已经被统计或这个对象没有指向为止则停止
        2.4.5 其他情况下重复1.4.2
        2.4.6 这些被统计的对象都不能被回收
        2.4.6 其它没有被指向的对象都要进行回收
   
    3.引用计数的线程安全
      3.1 在改变引用用计数和GC过程要进行进行同步
      3.2 2.4.1和修改引用计数指向要进行同步
      3.3(2.4.2,2.4.3,2.4.4)和修改引用计数指向要进行同步。
   
    4.引用计数的优点和缺点
      4.1 优点
        4.1.1 不用担心内存泄露
       
      4.2 缺点
        4.2.1 速度比较慢

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值