[TOC] 对象的生存与死亡 如何判定一个对象的生与死 1. 引用计数法 给对象中添加一个引用计数器,被引用加1,引用失效减1,计数器为0则对象可以被回收。 缺点:很难解决对象之间互相循环引用的问题。 2. 可达性分析法 通过一系列 的对象作为起点,向下搜索,遍历路径称为引用链。当一个对象到 不可达 ...
分类:
其他好文 时间:
2018-01-25 11:04:54
阅读次数:
169
垃圾收集器在对堆进行回收前,首先要做的事情就是要确定这些对象之中哪些还“存活”着, 哪些已经“死去" (即不可能再被任何途径使用的对象)。 一、引用计数算法 给每个对象中添加一个引用计数器,每当有一个地方引用它时, 计数器值就加l ; 当引用失效时,计数器值就减l :任何时刻计数器为0 的对象就是不 ...
分类:
编程语言 时间:
2018-01-20 20:29:21
阅读次数:
191
[TOC] 对象的生存与死亡 如何判定一个对象的生与死 1. 引用计数法 给对象中添加一个引用计数器,被引用加1,引用失效减1,计数器为0则对象可以被回收。 缺点:很难解决对象之间互相循环引用的问题。 2. 可达性分析法 通过一系列 的对象作为起点,向下搜索,遍历路径称为引用链。当一个对象到 不可达 ...
分类:
其他好文 时间:
2018-01-20 10:57:51
阅读次数:
164
1.判断对象是否已死的两种方法 1.1 引用计数法 给对象添加一个引用计数器,如果其他对象引用计数器加一,引用失效计数器减一,当计数器为0的时候,则对象就认为是死亡的状态 优点:实现简单,效率高 缺点:无法解决循环引用的问题, 1.2 可达性算法(目前jvm用的gc方法) 通过GC roots 对象 ...
分类:
编程语言 时间:
2017-12-26 22:44:18
阅读次数:
197
weak: __weak ,是一个弱指针,不会让引用计数加 1,如果指向对象被销毁,指针会自动清空。 assign:__unsafe__unretained修饰,不会让引用计数器加 1,如果指向对象被销毁,指针不会被清空。如果用retain修饰UIView这类OC的类,会造成使用过程中的坏内存访问。 ...
分类:
其他好文 时间:
2017-11-27 12:48:59
阅读次数:
198
1、引用计数算法(Reference Counting Collector) 引用计数算法作为一种简单但是效率低下的算法,其主要原理如下:在堆中对每个对象都有一个引用计数器;当对象被引用时,引用计数器加1;当引用对象被置为空或者离开作用域时,引用计数器减1,由于这种方法无法解决互相引用的问题,因此J ...
分类:
编程语言 时间:
2017-11-07 18:11:52
阅读次数:
188
引用计数进行管理资源,我们最熟悉的就是智能指针。在c++11之前,我们的对象都从一个引用计数管理资源的类继承,这个类有一个引用计数器,两个配对的操作addref和delref,当delref将引用计数器减为0时,会自动调用delete。这种机制要求对象必须实例在堆上,也就是new创建。当决定继承一个 ...
分类:
其他好文 时间:
2017-10-13 18:03:30
阅读次数:
127
一、nil 、NSNull、Nil、NULL 区别 1、nil我们给对象赋值时一般会使用object = nil,表示我想把这个对象释放掉;或者对象由于某种原因,经过多次release,于是对象引用计数器为0了,系统将这块内存释放掉,这个时候这个对象为nil,我称它为“空对象”。(注意:我这里强调的 ...
分类:
移动开发 时间:
2017-10-10 14:41:13
阅读次数:
297
在堆里存放着java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前需要知道哪些对象还存活,哪些对象已经死去。那怎么样去判断对象是否存活呢? 一、判断对象是否存活算法 1、引用计数法 实现思路:给对象添加一个引用计数器。每当有一个地方引用它时,计数器加1;引用失效时计数器减1。在任何时刻计数器为 ...
分类:
编程语言 时间:
2017-10-02 18:26:48
阅读次数:
229
首先要明白对象和引用的概念 (例子:a=1, a为引用,1为对象,对象1的引用计数器为1,b=1此时内存中只有一个对象1,a,b都为引用,对象的引用计数器此时为2,因为有两个引用) 引用计数器如何减少,当删除该对象的引用时候该对象的引用计数器将会减少。 python的垃圾回收(3种) 引用计数 当对 ...
分类:
编程语言 时间:
2017-09-04 12:04:50
阅读次数:
229