python 文件管理机制

1 引用计数

1、变量,通过变量指针引用对象

  变量指针指向具体对象的内存空间,取对象的值。

2、对象,类型已知,每个对象都包含一个头部信息(头部信息:类型标识符和引用计数器)

注意:

  变量名没有类型,类型属于对象(因为变量引用对象,所以类型随对象),变量引用什么类型的对象,变量就是什么类型的。

import sys
class Person: # 实例化一个类
	pass
p1=Person() # 引用类 
p2=p1   # 引用pi 计数加一
print(id(p1))
print(id(p1))
# # del p2  # 回收 引用计数减一
# print(sys.getsizeof(p1)) # 获取占用的内存 字节码
# print(sys.getrefcount(p1))  #获取引用计数

  id()是python的内置函数,用于返回对象的身份,即对象的内存地址。

2 标记和·清除

标记清楚分为两个阶段 首先标记垃圾检测 然后清除垃圾

按需分配,当内存不够的时候,从寄存器和程序栈上的引用出发,遍历对象,将遍历的对象打上标记,然后在内存中清除没有标记的对象。

 当Python中的对象越来越多,占据越来越大的内存,启动垃圾回收(garbage collection),将没用的对象清除。

 

 

垃圾回收原理

  当Python的某个对象的引用计数降为0时,说明没有任何引用指向该对象,该对象就成为要被回收的垃圾。比如某个新建对象,被分配给某个引用,对象的引用计数变为1。如果引用被删除,对象的引用计数为0,那么该对象就可以被垃圾回收。

3何为分代回收

分代回收是一种典型的异空间换时间的技术

这种思想简单来说就是:对象存在时间越长,越不可能是垃圾,应该减少去收集

分代是解决内存遍历需要太久时间而诞生的方案

分代回收可以减少标记 清楚机制所带来的额外操作

分代就是将回收对象分成数个代,比如青年带,中年代,老年代,每个带都是一个链表(集合) 当青年代满时,将触发将清理所有三代,执行标记清楚操作之后,当中年代满时,将触发会清理中年代,老年代,最终老年代触发后只会清理自己的

老年代的存活时间最长

 

原文地址:https://www.cnblogs.com/zhangshijiezsj/p/14139269.html