zoukankan      html  css  js  c++  java
  • 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)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

  • 相关阅读:
    Python实现MapReduce,wordcount实例,MapReduce实现两表的Join
    structure needs cleaning
    Lifecycle of an ASP.NET MVC 5 Application
    ASP.NET Integration with IIS 7
    Execution order of modules in IIS7
    Assembly Binding redirect: How and Why?
    Cannot See Worker Processes Icon in IIS
    What is the main difference between a key, an IV and a nonce?
    核心玩法的三要素
    ruby各种循环输出数组元素
  • 原文地址:https://www.cnblogs.com/weswes/p/9988411.html
Copyright © 2011-2022 走看看