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程序运行流程与垃圾回收机制的更多相关文章
- 几个简单的程序看PHP的垃圾回收机制
每一种计算机语言都有自己的自动垃圾回收机制,让程序员不必过分关心程序内存分配,php也不例外,但是在面向对象编程(OOP)编程中,有些对象需要显式的销毁,防止程序执行内存溢出. 一.PHP 垃圾回收机 ...
- python进阶(7)垃圾回收机制
Python垃圾回收 基于C语言源码底层,让你真正了解垃圾回收机制的实现 引用计数器 标记清除 分代回收 缓存机制 Python的C源码(3.8.2版本) 1.引用计数器 1.1环状双向链表 refc ...
- Python的内存管理和垃圾回收机制
内存管理 Python解释器由c语言开发完成,py中所有的操作最终都由底层的c语言来实现并完成,所以想要了解底层内存管理需要结合python源码来进行解释. 1. 两个重要的结构体 include/o ...
- python的内存管理与垃圾回收机制学习
一.python内存申请: 1.python的内存管理分为六层:最底的两层有OS控制.第三层是调用C的malloc和free等进行内存控制.第四层第五层是python的内存池.最上层使我们接触的直接对 ...
- python全栈开发day103-python垃圾回收机制、mro和c3算法解析、跨域jsonp\CORS、Content-Type组件
Python垃圾回收 -- 引用计数 -- Python为每个对象维护一个引用计数 -- 当引用计数为0的 代表这个对象为垃圾 -- 标记清除 -- 解决孤立的循环引用 -- 标记根节点和可达对象 - ...
- 编程语言分类,Python代码执行,应用程序使用文件的三步骤,变量,常量,垃圾回收机制
编程语言分为 机器语言(直接用二进制01跟计算机直接沟通交流,直接操作硬件) 优点:计算机能够直接读懂,速度快 缺点:开发效率极低 汇编语言(用简单的英文标签来表示二进制数,直接操作硬件) 优点:开发 ...
- 详解python的垃圾回收机制
python的垃圾回收机制 一.引子 我们定义变量会申请内存空间来存放变量的值,而内存的容量是有限的,当一个变量值没有用了(简称垃圾)就应该将其占用的内存空间给回收掉,而变量名是访问到变量值的唯一方式 ...
- Python中的垃圾回收机制
Python的垃圾回收机制 引子: 我们定义变量会申请内存空间来存放变量的值,而内存的容量是有限的,当一个变量值没有用了(简称垃圾)就应该将其占用的内存给回收掉,而变量名是访问到变量值的唯一方式,所以 ...
- python入门之垃圾回收机制
目录 一 引入 二.什么是垃圾回收机制? 三.为什么要用垃圾回收机制? 四.垃圾回收机制原理分析 4.1.什么是引用计数? 4.2.引用计数扩展阅读 4.2.1 标记-清除 4.2.2 分代回收 一 ...
随机推荐
- Linux--Centos 下搭建 gitolite
参考:http://blog.csdn.net/zhangjs0322/article/details/32711211 http://gitolite.com/gitolite/fool_p ...
- nginx配置文件说明(包含IP黑名单、代理反射、负载均衡的配置)
先看下nginx配置文件整体结构 图片来源51cto 配置文件及注解: #运行用户 主模块指令,指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行 user nobody; ...
- SVN常见错误解决办法和批量add等命令
批量添加所有更改文件 svn add . --no-ignore --force 提交文件 svn commit -m "up" File already exists: file ...
- 分享一套好看的PyCharm Color Shceme 配色方案
配色方案图1 点击可查看大图 (color shceme 配色文件下载链接已经放在文末) 配色方案图2 配色方案图3 picture1 picture2 整体效果 下载链接 https://files ...
- 如何把word文档导入到数据库中——java POI
本文方法借鉴于https://www.cnblogs.com/ljysy/p/10574197.html 在经过朋友的指导下,在处理文档的方式上有所不同. 我的数据库使用的是SQL server,这篇 ...
- POJ-2349 Arctic Network(最小生成树+减免路径)
http://poj.org/problem?id=2349 Description The Department of National Defence (DND) wishes to connec ...
- Pytorch——BERT 预训练模型及文本分类
BERT 预训练模型及文本分类 介绍 如果你关注自然语言处理技术的发展,那你一定听说过 BERT,它的诞生对自然语言处理领域具有着里程碑式的意义.本次试验将介绍 BERT 的模型结构,以及将其应用于文 ...
- mysql统计指定数据库的各表的条数
mysql统计指定数据库的各表的条数 SELECT table_schema,table_name,table_rows,CREATE_TIME FROM TABLES WHERE TABLE_SCH ...
- iOS之正则表达式(一)
这几天研究正则表达式发现正则表达式真是个好东西,可以在支付的时候轻松匹配交易数额,入门内容以及匹配如下: @interface ViewController () @property (weak, n ...
- http跳转http
server {listen 80;server_name 123.com;root /var/www/web/123;index index.html index.htm index.php;rew ...