# 垃圾回收

# 小整数对象池

# a = 100
# python对小整数的定义是[-5,257],这些证书对象是提前创建好的,不会被垃圾回收,再一个python的程序中,所有位于这个范围内的正式使用的都是一个对象

# 大整数对象池
# 每一个大整数,均创建一个新的对象
# >>> A = 1000
# >>> id(A)
# 1797282549648
# >>> B = 1000
# >>> id(B)
# 1797289269392

# intern机制
# >>> a = 'hello'
# >>> b = 'hello'
# >>> id(a)
# 1797289499256
# >>> id(b)
# 1797289499256

# >>> b = 'hello world'
# >>> a = 'hello world'
# >>> id(a)
# 1797289512176
# >>> id(b)
# 1797289512112

# 总结:
# 小整数[-5,257)共用对象,常驻内存
# 单个字符共用对象,常驻内存
# 单个单词,不可修改,默认开启intern机制,共用对象,引用计数为0,则销毁

# GC垃圾回收(Garbage collection)

# 引用计数机制:
# python里每一个东西都是对象,他们的核心就是一个结构体:PyObject
# typedef struct_object{
# int ob_refcnt
# struct_typeobject *ob_type
# } PyObject
# PyObject是每个对象必有的内容,其中ob_refcnt就是做为引用计数。当一个对象有新的引用时,它的ob_refcnt
# 就会增加,当引用它的对象被删除,他的ob_refcnt就会减少
# 当引用计数为0时,该对象生命就结束了

# 引用计数机制的有点:
# 简单
# 实时性。一旦没有引用,内存就直接释放了。不用向其他机制等到特定时机。实时性还带来一个好处:处理回收内存的时间分摊到了平时.

# import gc
# class ClassA():
# def __init__():
# print("object born,id:%s"%str(hex(id(self))))

# def f2():
# while True:
# c1 = ClassA()
# c2 = ClassA()
# c1.t = c2
# c2.t = c1
# del c1
# del c2
# gc.disable()
# f2()

# 话说Ruby与Python垃圾回收

# 隔代回收
# python以引用计数机制为主,隔代收集两种机制为辅的策略

# 0----------------------------------------------- 执行100次 -1 循环使用,引用计数不能为0,看是否循环引用?如果是循环引用就-1

# 1----------------------------------------------- 执行1次

# 2--------------------------------------------

import gc
print(gc.get_count()) #获取当前自动执行垃圾回收的技术器,返回提个长度为3的列表
# (243, 3, 1)
print(gc.get_count())

print(gc.get_threshold()) # 获取的gc模块中自动执行垃圾回收的频率
# (700, 10, 10)

print(gc.set_threshold()) #设置自动执行垃圾回收的频率

# 1.导致引用计数+1的情况
# 1.对象被创建,如a=23
# 2.对象被引用,如b=a
# 3.对象被作为参数,传入一个函数中,例如func(a)
# 4.对象作为一个元素,存储在容器中,list=[a,a]

# 2.导致引用计数-1的情况
# 对象的别名呗显示销毁 列如del a
# 对象的别名被赋予新对象,例如a = 23、
# 一个对象离开他的作用域,如f函数执行完毕时,func函数中的局部变量(全局变量不会)
# 对象所在的容器被销毁,或者从容器中删除对象

# gc模块的自动垃圾回收机制
# 必须要import gc
# gc.enable() 开启
# gc.disabled() 禁用
# gc.isenabled() 是否开启gc
# gc.collect() 收集垃圾(手动清理垃圾)

# gc.garbage() 显示清理垃圾

# import sys
# a = "hello world"
# b = c
# sys.getrefcount(a)得到的值-1就是真正的引用个数

python 垃圾回收的更多相关文章

  1. Python垃圾回收机制--完美讲解!

    转自: http://www.jianshu.com/p/1e375fb40506 先来个概述,第二部分的画述才是厉害的. Garbage collection(GC) 现在的高级语言如java,c# ...

  2. python垃圾回收机制与小整数池

    python垃圾回收机制 当引用计数为0时,python会删除这个值. 引用计数 x = 10 y = x del x print(y) 10 引用计数+1,引用计数+1,引用计数-1,此时引用计数为 ...

  3. python垃圾回收机制:引用计数 VS js垃圾回收机制:标记清除

    js垃圾回收机制:标记清除 Js具有自动垃圾回收机制.垃圾收集器会按照固定的时间间隔周期性的执行. JS中最常见的垃圾回收方式是标记清除. 工作原理 当变量进入环境时,将这个变量标记为"进入 ...

  4. python垃圾回收

    python垃圾回收 python垃圾回收主要使用引用计数来跟踪和回收垃圾.在引用计数的基础上,通过“标记—清除”解决容器对象可能产生的循环引用问题,通过“分代回收”以空间换时间的方法提高垃圾回收效率 ...

  5. 《垃圾回收的算法与实现》——Python垃圾回收

    Python垃圾回收 python采用引用计数法进行垃圾回收 Python内存分配 python在分配内存空间时,在malloc之上堆放了3个独立的分层. python内存分配时主要由arena.po ...

  6. python垃圾回收机制(Garbage collection)

    由于面试中遇到了垃圾回收的问题,转载学习和总结这个问题. 在C/C++中采用用户自己管理维护内存的方式.自己管理内存极其自由,可以任意申请内存,但也为大量内存泄露.悬空指针等bug埋下隐患. 因此在现 ...

  7. python 垃圾回收详解

    原文:https://zhuanlan.zhihu.com/p/31150408 总纲 策略和垃圾回收系统工作内容 引用计数详解 标记-清除+分代收集 循环引用 编程应用-常见方法 ex 过程详解 使 ...

  8. python垃圾回收算法

    标准python垃圾回收器由两部分组成,即引用计数回收器和分代垃圾回收器(即python包中的gc module).其中,引用计数模块不能被禁用,而GC模块可以被禁用. 引用计数算法 python中每 ...

  9. python 垃圾回收笔记

    目录 引用计数 python内部的引用计数机制 循环引用 调试内存泄漏 总结 python 程序在运行的时候,需要在内存中开辟出一块空间,用于存放运行时产生的临时变量:计算完成后,再将结果输出到永久性 ...

随机推荐

  1. eclipse连接手机一直连接不起

    任何环境都搭配没有问题,依然连接不起手机,最后解决办法: 把sdk下tools的文件全部复制一份到platform-tools下即可

  2. 管理并行SQL执行的进程

    本节介绍的并行执行功能可用于Oracle数据库企业版 本节介绍如何管理SQL语句的并行处理.在此配置中,Oracle数据库可以将处理SQL语句的工作分为多个并行进程. 许多SQL语句的执行可以并行化. ...

  3. Linux内核的整体架构简介

    1. 前言 本文是“Linux内核分析”系列文章的第一篇,会以内核的核心功能为出发点,描述Linux内核的整体架构,以及架构之下主要的软件子系统.之后,会介绍Linux内核源文件的目录结构,并和各个软 ...

  4. Centos 6.x/7.x yum安装php5.6.X(最新版)

    鉴于Centos 默认yum源的php版本太低了,手动编译安装又有点一些麻烦,那么如何采用Yum安装的方案安装最新版呢.那么,今天我们就来学习下如何用yum安装php最新版. 1.检查当前安装的PHP ...

  5. 在本地SharePoint 2013 搭建App开发环境

    1.环境描述: SharePoint服务器: Windows Server 2012 R2+SharePoint 2013 IP:192.168.1.180,域控:ser.com 开发环境: Wind ...

  6. 微信小程序-聊天列表-角标

    <div class="list-body" bindtap='openChat' data-Obj='{{oitem}}'> <!-- 头像 --> &l ...

  7. telnet mysql时出现:is not allowed to connect to this MySQL serverConnection closed by foreign host问题的解决

    有时候telnet一个mysql服务器的时候会出现: Host '192.168.0.1' is not allowed to connect to this MySQL serverConnecti ...

  8. HBase的replication原理及部署

    一.hbase replication原理 hbase 的复制方式是 master-push 方式,即主集群推的方式,主要是因为每个rs都有自己的WAL. 一个master集群可以复制给多个从集群,复 ...

  9. [jquery]为jQuery.ajax添加onprogress事件

    原理: 给XMLHttpRequest对象的upload属性绑定onprogress方法监听上传过程 var xhr = new XMLHttpRequest();  xhr.upload.onpro ...

  10. MVC 基于 AuthorizeAttribute 实现的登陆权限控制

    代码的执行顺序是 OnAuthorization–>AuthorizeCore–>HandleUnauthorizedRequest. 如果AuthorizeCore返回false时,才会 ...