高频面试题之Python垃圾回收机制

简介: 什么垃圾回收机制? 引用计数 标记清除 分代回收

高频面试题之Python垃圾回收机制

什么垃圾回收机制?

应用程序在运行的过程中会产生大量的变量来存储数据, 在运行过程中某些变量已经失去了作用价值, 就需要将这些毋庸的变量销毁掉来提升所占据的内控空间, 减少消耗!

python, java,php, 一般在底层会自动回收垃圾, 很少数需要手动操作

C语言, 汇编语言, 是需要手动清楚垃圾变量, 比较麻烦

Python垃圾回收机制

在Python中的垃圾回收机制, 是以 引用计数 为主要方式, 配合 标记清除还有 分代回收进行辅助回收的

1.引用计数规则

在Python内部会为每一个对象的维护创建引用计数器

当一个对象的引用被创建或者复制时,对象的引用计数器 +1

当一个对象的引用被销毁时,计数器的值-1

当计数器的值为0时,就意味着对象已经再没有被使用了,可以将其内存释放掉。
laji.jpg

2. 标记清除

标记-清除 规则 主要是为了解决循环引用,它的侧重点就在于关注可能产生循环引用的对象!

    容器变量是最容易发生循环引用的现象的, 容器变量内部互相引用就会出现这种情况
那么 标记清除是 怎么解决这个问题的呢?
​ 为了方便大家理解这个思路呢, 我们就不从root链表和unreachable链表出发了, 直接简单明了, 就是当容器变量对象被创建好的时候出了本身的引用计数之后, 还会把他们对应的内存的变量值做个标记, 如果后期发现 在堆里面找不到与 前面容器变量相对象的数据 则都被人为是 垃圾数据 而被回收机制清理

3. 分代回收

Python为了提高垃圾回收机制的效率提出了分代回收策略

一般表示方法有2类

1.数字表示法:
  • 0代 表示垃圾回收最频繁的对象
  • 1代 其次
  • 2代 表示回收次数最少的对象
2.年纪表示法:
  • 青年代 表示垃圾回收最频繁的对象
  • 中年代 其次
  • 老年代 表示回收次数最少的对象
核心思想就是: 对象在运行期间存活的时间越久越不可能被销毁, 应该减少对它的收集频率!

垃圾回收机制的模块

python采用的主要的垃圾回收机制模块是GC 模块
import sys
import gc


class ObjectDemo:
    def __del__(self):
        print("我被销毁了 ...")


print(gc.get_threshold())  # 打印分代收集的设置
demo = ObjectDemo()  # 创建对象 引用计数器 + 1
print(sys.getrefcount(demo))  # getrefcount() 函数调用  引用计数器 +1

-- (700, 10, 10)  
#     700  当0代链表中超过700个对象时,自动进行分代收集, 默认
#     10   当0代链表回收10次后,对0代和1代进行收集
#     10   当1代链表回收10次以后,对所有链表进行收集

-- 2    #  总共计数器 是 2 
-- 我被销毁了 ...

 
相关文章
|
30天前
|
缓存 监控 算法
Python内存管理:掌握对象的生命周期与垃圾回收机制####
本文深入探讨了Python中的内存管理机制,特别是对象的生命周期和垃圾回收过程。通过理解引用计数、标记-清除及分代收集等核心概念,帮助开发者优化程序性能,避免内存泄漏。 ####
41 3
|
2月前
|
存储 算法 安全
JVM常见面试题(四):垃圾回收
堆区域划分,对象什么时候可以被垃圾器回收,如何定位垃圾——引用计数法、可达性分析算法,JVM垃圾回收算法——标记清除算法、标记整理算法、复制算法、分代回收算法;JVM垃圾回收器——串行、并行、CMS垃圾回收器、G1垃圾回收器;强引用、软引用、弱引用、虚引用
|
3月前
|
存储 监控 算法
美团面试:说说 G1垃圾回收 底层原理?说说你 JVM 调优的过程 ?
尼恩提示: G1垃圾回收 原理非常重要, 是面试的重点, 大家一定要好好掌握
美团面试:说说 G1垃圾回收 底层原理?说说你 JVM 调优的过程  ?
|
6月前
|
存储 缓存 监控
Java面试题:在Java中,对象何时可以被垃圾回收?编程中,如何更好地做好垃圾回收处理?
Java面试题:在Java中,对象何时可以被垃圾回收?编程中,如何更好地做好垃圾回收处理?
80 0
|
3月前
|
Java C++ Python
【面试宝典】深入Python高级:直戳痛点的题目演示(下)
【面试宝典】深入Python高级:直戳痛点的题目演示(下)
|
3月前
|
设计模式 Unix Python
【面试宝典】深入Python高级:直戳痛点的题目演示(上)
【面试宝典】深入Python高级:直戳痛点的题目演示(上)
|
4月前
|
缓存 Java Python
python垃圾回收&缓存机制
python垃圾回收&缓存机制
|
4月前
|
存储 算法 Java
关于python3的一些理解(装饰器、垃圾回收、进程线程协程、全局解释器锁等)
该文章深入探讨了Python3中的多个重要概念,包括装饰器的工作原理、垃圾回收机制、进程与线程的区别及全局解释器锁(GIL)的影响等,并提供了详细的解释与示例代码。
41 0
|
5月前
|
算法 Java 开发者
Python垃圾回收机制
Python垃圾回收机制
|
6月前
|
缓存 监控 算法
Java面试题:描述Java垃圾回收的基本原理,以及如何通过代码优化来协助垃圾回收器的工作
Java面试题:描述Java垃圾回收的基本原理,以及如何通过代码优化来协助垃圾回收器的工作
94 8

热门文章

最新文章