Python程序运行流程与垃圾回收机制

Python程序运行流程

Python解释器首先将程序将py文件编译成一个字节码对象PyCodeObject(只存在于内存中)。(当这个模块的 Python 代码执行完后,就会将编译结果保存到了pyc文件中,这样下次就不用编译,直接加载到内存中。pyc文件只是PyCodeObject对象在硬盘上的表现形式。)

py文件被编译后,接下来的工作就交由 Python虚拟机来执行字节码指令。Python虚拟机会从编译得到的PyCodeObject对象中依次读入每一条字节码指令,并在当前的上下文环境中执行这条字节码指令。

Java与Python运行流程区别

Python:解释器将源代码转换为字节码,然后再由python解释器来执行这些字节码。(翻译-执行)

Java:javac将源代码编译为字节码,然后再由JVM解释执行这些字节码。(编译-翻译-执行)

Python垃圾回收机制

垃圾回收的时候,通常会使用引用计数的模型,这是一种最直观,最简单的垃圾收集技术。Python同样也使用了引用计数,但是引用计数存在这些缺点:

  • 频繁更新引用计数会降低运行效率
  • 引用计数无法解决循环引用问题

Python在引用计数机制的基础上,使用了主流垃圾收集技术中的标记-清除分代收集两种技术。

注:循环引用可能造成内存泄露问题。内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

原文地址:https://www.cnblogs.com/weswes/p/9988411.html