本文摘要:前言内存管理是语言设计的一个重要方面。

爱游戏

前言内存管理是语言设计的一个重要方面。这是确定语言性能的重要因素。

无论是手动管理C语言,还是Java垃圾收集,它已成为语言最重要的特征。这是一个Python语言作为示例,描述了一种动态类型,面向对象的内存管理方法。对象的内存使用赋值语句是语言最常用的功能。

但即使是最简单的分配声明,它也可能是非常的内涵。Python的作业声明值得研究。a = 1整数1是对象。

A是一个参考。使用赋值语句引用指向对象1的点。

Python是一种动态类型语言(参考动态类型),对象与参考分开。Python就像使用“筷子”,通过引用联系并翻转真正的食物物体。objgraph是Python中的第三方包。

您需要在安装前安装XDOT。sudo%20-get%20malstall%20xdotsudo%20pip%20install%20objgraphobjgraph官方网站:http://mg.pov.lt/objgraph/可以彼此引用两个对象,从而构成所谓的参考环(参考 %20周期)。A%20 =%20 [] b%20 =%20 [a] a.append(甚至是一个对象,你只需要引用自己,你可以构成一个引用戒指。a%20 =%20 [] a.append(a)参考(getRefcount(a))为垃圾收集机制带来了很好,我稍后会详细介绍这一点。

引用降低对象的参考计数可以减少。例如,您可以使用del关键字删除参考:从%20sys%20导入%20 =%20 [1,%202,%203] b%20 =%20aprint(getRefcount(b))del% 20Aprint(getRefcount(b))del还可用于删除容器元素中的元素,例如:如果参考指向的参考,则为:a%20 =%20 [1,2,3] del%20a [0]打印(a) 对象A,当该参考达到一些其他对象B时,对象A的参考计数减少:从%20sys%20导入%20 =%20 [1,%202,%203] b%20 = %20Aprint(getRefcount b))a%20 =%201ptrint(getRefcount(b))垃圾收集太多,将始终变胖,python也是如此。当Python中的对象正在增加时,它们将占用越来越多的内存。

但是,你不必担心Python的身体形状太多,它将是良好的“减肥”,开始垃圾收集(垃圾%20collection),将被清除。许多语言有垃圾恢复机制,例如Java和Ruby。虽然最终目标是塑造苗条提醒,但不同语言的减肥计划具有很大的差异。根据基本原理,当Python对象的参考计数减少到0时,对对象没有引用,这是一个要恢复的垃圾。

爱游戏

例如,将其分配给参考的新对象,并且对象的参考计数变为1。如果删除引用,则对象的参考编号为0,则可以通过垃圾回收对象。

例如,下表:在del%20aadel%20a之后,%20 =%20 [1,%202,%203],没有参考先前建立的[1%202,%203]。用户无法通过任何方式触摸或使用此对象。如果这个对象继续留在记忆中,它已经变得不健康。

当垃圾开始时,Python扫描了0的对象,减肥是一种昂贵而艰苦的事情,减肥。当垃圾恢复时,Python无法执行其他任务。频繁的垃圾收集将大大降低Python的工作效率。

如果内存中没有许多对象,则无需启动垃圾收集。因此,Python只会在某些条件下开始垃圾回收。当Python正在运行时,记录分配对象(Object%20分配)和未分配对象(对象%20deAllocation)的数量。

当两者之间的差异高于某个阈值时,将开始垃圾恢复。我们可以通过GC模块查看此阈值:Import%20GCPrint(GC.Get_Threshold()):导入%20Gcprint(GC.Get_ThreshReshold()),试剂后的两个10,它可以在后面看。

700是垃圾回收启动的门槛。您可以通过GC中的set_threshold()方法重置它。我们也可以手动启动垃圾收集,甚至gc.collect()。

使用收据策略(生成)的同时回收Python。这种策略的基本假设是,物体越长,在后面的计划中将垃圾变成越来越不可能。我们的程序倾向于产生大量的物体,许多物体已经出现了很快而消失,但是一些物体长期以来一直使用。

对于信任和效率,对于这种“长寿”对象,我们相信他们的使用,因此他们在垃圾收集中减少了频率的频率。小家伙应检查更多python以将所有对象划分为0,1,2代。所有新对象都是0代。

当一代物体有经验丰富的垃圾收集时,仍然生存,那么它被分类为下一代。当启动垃圾回收后,将扫描所有0代。如果0代通过一定数量的垃圾恢复,则将启动0代和1代的扫描清洁。当1代已经经历了一定数量的垃圾恢复时,那么对0,1,2,即扫描所有对象。

这两次返回到上面返回的两次10(700,%2010,%2010)。也就是说,每10次0代垃圾回收将与1代垃圾收集合作; 每10代垃圾恢复只会有2代垃圾回收。

它也可以用set_threshold()调整,例如更频繁地扫描2代对象。Import%20GCGC.Set_Threshold(700,%2010,%205)隔离环的参考环的存在将为上述垃圾收集机制带来巨大的困难。这些参考环可以使其未使用,但参考计数不是0。

a%20 =%20 [] b%20 =%20 [a] a.append(b)del%20adel%20b我们首先创建了两个表对象,并相互用以构成参考环。删除A,B引用后,无法从程序调用这两个对象,没有任何内容。然而,由于参考环的存在,这两个物体的参考计数不会减少到0,并且它不会被垃圾回收。

孤立的引号才能恢复这样的参考戒指,Python复制每个对象的参考计数,可以记住为GC_REF。假设每个对象I,计数是GC_REF_I。

爱游戏

Python将遍历所有对象I. 对于每个对象I引用的对象j,相应的GC_REF_J减少1。遍历后的结果结束,GC_REF不是0对象,并且需要保留由这些对象引用的对象以及继续引用的对象。垃圾收集的其他物体。

摘要Python作为动态类型语言,其对象和参考分离。这与过去的过程语言有很大的差异。

为了有效释放内存,Python内置了垃圾回收支持。Python采用相对简单的垃圾收集机制,即参考计数,因此需要解决隔离参考的问题。Python都有公共和特殊的地方。对内存管理机制的理解是提高Python性能的重要一步。

本文关键词:爱游戏

本文来源:爱游戏-www.cixijdwx.com