热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python垃圾回收离职_python中的垃圾回收机制

对象池:1、数值类型小整数池:[-5:256]程序开始时,一次性加载到内存LEGB(局部变量闭包全局变量内建函数)全局只有一个idis大整

'''

对象池:

1、数值类型

小整数池:

[-5:256]

程序开始时,一次性加载到内存

LEGB(局部变量 闭包 全局变量 内建函数)

全局只有一个

id

is

大整数池:

每创建一个不是小整数池的变量,自动存储到大整数池中

2、字符串:

intern机制

每个单词(字符串),不夹杂空格或其他符号,默认开启intern机制

垃圾回收机制 GC机制

python采用的是引用计数机制为主,标记-清除和分代收集两种机制为辅的策略

1、如何获取一个对象的引用计数

'''

'''

import sys

class aa():

# 初始化方法

def __init__(self):

print("创建对象init")

# super(self).__init__()

#创建对象开辟对象时调用

def __new__(cls, *args, **kwargs):

print("开辟内存空间")

return super(aa, cls).__new__(cls)

#对象被系统回收之前,会调用该方法

def __del__(self):

print("%s say goodbye!"%hex(id(self)))

def test1(aaa):

print(aaa)

print("a的引用计数为:",sys.getrefcount(a))

a = aa()

print("a的引用计数为:",sys.getrefcount(a))

b = a

print("a的引用计数为:",sys.getrefcount(a))

c = [a]

print("a的引用计数为:",sys.getrefcount(a))

test1(a)

c.remove(a)

b =12

print("a的引用计数为:",sys.getrefcount(a))

del a

print("-"*20+"程序结束"+"-"*20)

'''

'''

由于引用计数解决不了循环引用的问题,因此,产生隔代回收机制

'''

import gc

import time

class AA:

#开辟新内存空间

def __new__(cls, *args, **kwargs):

print("开辟新内存空间")

return super(AA,cls).__new__(cls)

def __init__(self):

print("object born at %s"%hex(id(self)))

def __del__(self):

print("%s 被系统回收!" % hex(id(self)))

def start():

while True:

a = AA()

b = AA()

a.vv = b

b.vv = a

del a

del b

print(gc.get_threshold())

print(gc.get_count())

time.sleep(0.1)

#手动关闭垃圾回收机制

# gc.disable()

gc.set_threshold(200,10,10)

start()



推荐阅读
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 如何在C#中配置组合框的背景颜色? ... [详细]
  • 开发日志:201521044091 《Java编程基础》第11周学习心得与总结
    开发日志:201521044091 《Java编程基础》第11周学习心得与总结 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • Python全局解释器锁(GIL)机制详解
    在Python中,线程是操作系统级别的原生线程。为了确保多线程环境下的内存安全,Python虚拟机引入了全局解释器锁(Global Interpreter Lock,简称GIL)。GIL是一种互斥锁,用于保护对解释器状态的访问,防止多个线程同时执行字节码。尽管GIL有助于简化内存管理,但它也限制了多核处理器上多线程程序的并行性能。本文将深入探讨GIL的工作原理及其对Python多线程编程的影响。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 本文将继续探讨 JavaScript 函数式编程的高级技巧及其实际应用。通过一个具体的寻路算法示例,我们将深入分析如何利用函数式编程的思想解决复杂问题。示例中,节点之间的连线代表路径,连线上的数字表示两点间的距离。我们将详细讲解如何通过递归和高阶函数等技术实现高效的寻路算法。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • 本文介绍了如何利用 Delphi 中的 IdTCPServer 和 IdTCPClient 控件实现高效的文件传输。这些控件在默认情况下采用阻塞模式,并且服务器端已经集成了多线程处理,能够支持任意大小的文件传输,无需担心数据包大小的限制。与传统的 ClientSocket 相比,Indy 控件提供了更为简洁和可靠的解决方案,特别适用于开发高性能的网络文件传输应用程序。 ... [详细]
  • 在 Vue 应用开发中,页面状态管理和跨页面数据传递是常见需求。本文将详细介绍 Vue Router 提供的两种有效方式,帮助开发者高效地实现页面间的数据交互与状态同步,同时分享一些最佳实践和注意事项。 ... [详细]
  • 在深入掌握Spring框架的事务管理之前,了解其背后的数据库事务基础至关重要。Spring的事务管理功能虽然强大且灵活,但其核心依赖于数据库自身的事务处理机制。因此,熟悉数据库事务的基本概念和特性是必不可少的。这包括事务的ACID属性、隔离级别以及常见的事务管理策略等。通过这些基础知识的学习,可以更好地理解和应用Spring中的事务管理配置。 ... [详细]
  • 在Java编程中,`String`对象既可以用作对象,也可以用作基本类型。本文深入解析了`String`对象中`equals`方法与`==`运算符的区别及其应用场景。`equals`方法用于比较两个字符串的内容是否相同,而`==`运算符则用于比较两个字符串对象的引用是否相同。通过具体示例和代码片段,文章详细阐述了这两种比较方式的内在机制和适用场景,帮助开发者更好地理解和使用`String`对象的比较操作。 ... [详细]
  • Objective-C 中的委托模式详解与应用 ... [详细]
author-avatar
helenheling2007895
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有