论文部分内容阅读
动态语言的简洁性,易学性缩短了软件开发人员的开发周期,所以深受研发人员的喜爱。其在机器学习、科学计算、Web开发等领域都有广泛的应用。在众多的动态语言中,Python是用户数量较大的动态语言之一。本文主要研究Python对内存资源的管理。Python开发效率高,但是运行效率常为人诟病,主要原因在于一切皆是对象的语言实现哲学导致在某些基本类型上的设计比较臃肿。在一切皆是对象的哲学基础上,Python虚拟机将所有的对象分成非容器对象和容器对象,两种对象都是基于内存池进行管理。操作系统提供的库函数malloc是一个通用的内存管理方案,有很多的局限性:碎片问题、效率问题、内存泄露和悬挂指针,所以Python虚拟机在malloc基础上采用池化的内存解决方案和自动内存管理。本文详细的解读了Python虚拟机的非容器对象和容器对象池化内存管理方案,基于引用计数的垃圾回收机制及其循环垃圾回收模块。之后本文阐述了Python虚拟机在非容器对象内存池管理算法上存在内存强占和碎片的缺陷并提出了一种基于贪心策略的内存申请和释放的算法。最后,针对非容器对象在开源的实验平台Unladen-Swallow上验证本文方法在Web应用领域的高效性。针对循环引用的问题,本文进行了关于Python虚拟机内存使用的实证研究,选取了六种不同的Python项目,并获取这六种不同的开源项目运行过程中的动态信息。实验的数据显示,循环垃圾出现频率不高。传统的基于TD算法的循环垃圾检测算法需要扫描候选集三次,而一种轻量级的循环垃圾回收算法只需扫描一次,但是其完备性不足。本文采用轻量级垃圾回收技术和传统的TD算法相结合的算法并充分考虑了Python循环垃圾回收的特点对循环垃圾回收算法进行了优化并进行了实验验证。