Python是一种半编译半解释型运行环境。首先,它会在模块“载入”时将源码编译成字节码(ByteCode)。而后,这些字节码会被虚拟机在一个“巨大”的核心函数里解释执行。这是导致Python性能较低的重要原因,好在现在有了内置Just-in-time二次编译器的PyPy可供选择。
当虚拟机开始运行时,它通过初始化函数完成整个运行环境设置:
创建解释器和主线程状态对象,这是整个进程的根对象。
初始化内置类型。数字、列表等类型都有专门的缓存策略需要处理。
创建_ builtin_ 模块,该模块持有所有内置类型和函数。
创建sys模块,其中包含了sys. path、 modules等重要的运行期信息。
初始化import机制。
初始化内置Exception。
创建_ _main_ 模块,准备运行所需的名字空间。
通过site py将site- packages中的第三方扩展库添加到搜索路径列表。
执行入口py文件。执行前会将_ main_ ._ dict_ 作为 名字空间传递进去。
程序执行结束。
执行清理操作,包括调用退出函数,GC清理现场,释放所有模块等。
终止进程。
Python源码是个宝库,其中有大量的编程范式和技巧可供借鉴,尤其是对内存的管理分配。个人建议有C基础的兄弟,在闲暇时翻看一二 。
先有类型(Type),而后才能生成实例(Instance)。Python 中的一切都是对象,包括类型在内的每个对象都包含一个标准头,通过头部信息就可以明确知道其具体类型。
头信息由“引用计数”和“类型指针”组成,前者在对象被引用时增加,超出作用域或手工释放后减小,等于0时会被虛拟机回收(某些被缓存的对象计数器永远不会为0)。
1.4内存管理
为提升执行性能,Python 在内存管理上做了大量工作。最直接的做法就是用内存池来减少操作系统内存分配和回收操作,那些小于等于256字节对象,将直接从内存池中获取存诸空间。
根据需要,虚拟机每次从操作系统申请-块256KB,取名为arena的大块内存。并按系统页大小,划分成多个pool。每个pool继续分割成n个大小相同的block,这是内存池最小存储单位。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !