由于服务端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 速度比较慢