zoukankan      html  css  js  c++  java
  • 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何为分代回收

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

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

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

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

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

    老年代的存活时间最长

     

  • 相关阅读:
    bootstrap不同屏幕区分数值
    jq星星评分
    大話西遊
    HDU 5353 Average 贪心
    HDU 5358 First One 数学+尺取法
    生活感受
    HDU 4372 Count the Buildings 组合数学
    暑假集训-合训第九场
    一些资料
    多校-HDU 5351 MZL's Border 数学规律
  • 原文地址:https://www.cnblogs.com/zhangshijiezsj/p/14139269.html
Copyright © 2011-2022 走看看