09-12-周五_15-58-51
This commit is contained in:
@@ -141,7 +141,7 @@ typedef struct {
|
||||
|
||||
在我们了解了这两个结构体,现在我们来看看每一个数据类型都封装了哪些值:
|
||||
|
||||
* flaot类型
|
||||
* float类型
|
||||
float结构体:
|
||||
|
||||
```c
|
||||
@@ -288,11 +288,7 @@ del a # 删除变量a:a对应的对象的引用计数器-1 (此时引用计
|
||||
2.将对象进行销毁,内存归还给操作系统,可用内存就增加。
|
||||
```
|
||||
|
||||
**当引用计数器**为0 时,意味着没有人再使用这个对象,这个对象就变成垃圾,垃圾回收。
|
||||
**回收:1.对象从refchain的链表移除。**
|
||||
**2.将对象进行销毁,内存归还给操作系统,可用内存就增加**。
|
||||
|
||||
以上就是引用计数器大体上的机制,但是后面的缓存机制学习完之后我们才会进一步理解,这里不是简单的说计数器等于0就销毁,内部还有一定的缓冲,目前就简单理解成计数器为0,我们就进行垃圾回收。
|
||||
以上就是引用计数器大体上的机制,但是后面的缓存机制学习完之后我们才会进一步理解,这里不是简单的说计数器等于0就销毁,内部还有一定的缓存,目前就简单理解成计数器为0,我们就进行垃圾回收。
|
||||
|
||||
#### 例子
|
||||
|
||||
@@ -327,7 +323,7 @@ v2.append(v1) # 把v1追加到v1中,则v1对应的[1,2,3]对象的引
|
||||
del v1 # 引用计数器-1
|
||||
del v2 # 引用计数器-1
|
||||
|
||||
最终v1,v2引用计数器都是1
|
||||
最终v1,v2引用计数器都是1,但是却没有任何的变量可以使用这个v1,v2原先指向的数据
|
||||
```
|
||||
|
||||

|
||||
@@ -353,7 +349,7 @@ del v2 # 引用计数器-1
|
||||
|
||||
### 2.1引入目的
|
||||
|
||||
为了解决循环引用的不足,python的底层不会单单只用引用计数器,引入了一个机制叫做标记清楚。
|
||||
为了解决循环引用的不足,python的底层不会单单只用引用计数器,引入了一个机制叫做标记清除。
|
||||
|
||||
### 2.2实现原理
|
||||
|
||||
@@ -385,7 +381,7 @@ del v2 # 引用计数器-1
|
||||
|
||||
在上图中,我们把小黑点视为全局变量,也就是把它作为root object,从小黑点出发,对象1可直达,那么它将被标记,对象2、3可间接到达也会被标记,而4和5不可达,那么1、2、3就是活动对象,4和5是非活动对象会被GC回收。
|
||||
|
||||
1. 寻找跟对象(root object)的集合作为垃圾检测动作的起点,跟对象也就是一些全局引用和函数栈中的引用,这些引用所指向的对象是不可被删除的。
|
||||
1. 寻找根对象(root object)的集合作为垃圾检测动作的起点,根对象也就是一些全局引用和函数栈中的引用,这些引用所指向的对象是不可被删除的。
|
||||
|
||||
2. 从root object集合出发,沿着root object集合中的每一个引用,如果能够到达某个对象,则说明这个对象是可达的,那么就不会被删除,这个过程就是垃圾检测阶段。
|
||||
|
||||
|
Reference in New Issue
Block a user