共计 828 个字符,预计需要花费 3 分钟才能阅读完成。
Python 中次要通过援用计数和内存池机制进行内存治理。
一、援用计数机制
Python 外部应用援用计数 (记录对象有多少个援用) 来放弃追踪内存中的对象,当对象被创立时,该对象的援用计数加 1; 当对象被销毁时,该对象的援用计数变为 0,它会被当做垃圾进行回收。
援用计数减少的状况:
(1)对象被创立,如 x =4。
(2)赋值给其它游戏变量,如 y =x。
(3)被作为参数传递给函数,如 foo(x)。
(4)作为容器对象的一个元素,如 a =[1,x,’33’]。
援用计数缩小的状况
(1)对象的援用来到它的作用域,比方,foo(x)函数执行完结时,x 援用的对象援用计数减 1。
(2)对象的援用被显式地销毁,如 del x 或 del y。
(3)对象的别名被赋值给其余对象,x=789。
(4)对象从窗口对象中被移除,www.sangpi.coma.remove(x)。
垃圾回收:
(1)垃圾收集器会回收援用计数为 0 的对象,并革除这些对象占用的内存空间。
(2)当两个对象互相援用时,若它们没有被其它援用所持有,则会被垃圾收集器回收。
(3)垃圾回收机制还有一个循环垃圾回收器,它能够确保开释循环援用对象(a 援用 b, b 援用 a)。
二、内存池机制
在 Python 中,很多时候申请的内存都是小块内存,这些小块内存在申请不久后又会被开释,这就意味着程序在运行期间会大量地执行申请和开释操作,影响 Python 的执行效率。为了放慢 Python 的执行效率,Python 引入了一个内存池机制,用于治理对小块内存的申请和开释。
Python 中所有小于 256 个字节的对象都应用内存池的分配器。另外,一些 Python 对象,如整数、浮点数或列表,都领有独立的内存池,对象之间不会共享这些独立的内存池。也就是说,若调配又开释了大量的整数,用于缓存这些整数的内存池将不再调配给浮点数。
Python 如何进行内存治理?下面曾经为大家做了具体的介绍,心愿能帮到大家。