详细剖析Python源代码编制过程
创始人
2024-06-23 19:20:18
0

Python语言中提供的re模块能支持正则表达式,还提供SGML,XML分析模块,大多数的开发人员运用Python源代码进行XML程序的开发和运行,在这里拿出来和大家分享一下。

有着很多相似点,所以就用这个顺序了,Python的GC章节,我打算更多地着眼于实现和我的疑问,Java的GC章节,更多放在使用上。Python是走多种GC技术路线相结合的路线的,我以为有可取之处。

首先Python采用了原始的Ref Counting技术而对于引用计数解决不了的循环引用,Python源代码也采用了Mark-Sweeping进行GC。这样似乎有两个好处,大量的内存回收。分摊给了引用计数上。

减轻了Mark过程的负担,不会造成程序的停顿,而又可以真正的消除循环引用等造成的真实的内存泄露。PyObject_GC_New将会调用_PyObject_GC_Malloc,其中前者的返回值。

关注的是对象本身,而后者关注的是内存。实际上,在一块刚刚分配的内存上,对象和它锁在的内存有着如下的关系:从对象创建的过程来看,Python有如下几个关键的C实现函数和结构:

  1. typedef union _gc_head {  
  2.     struct {  
  3.         union _gc_head *gc_next;  
  4.         union _gc_head *gc_prev;  
  5.         Py_ssize_t gc_refs;  
  6.     } gc;  
  7.     long double dummy;  /* force worst-case alignment */  
  8. } PyGC_Head; 

其实,我本人对这个结构稍有失望,因为要回收一块内存,所占用的资源实在是太多了。可能是我太小家子气了,我觉得8个字节也许刚刚好。老实说,在我心中,已有一个初步的想法,一个对象的管理内存,完全仅仅需要8个字节足够了,而且整个GC的过程,不需要拷贝和压缩。

当我看代码的时候,不知道是我对某些技巧不了解,还是LOCK就没有实现,我感觉Python的malloc和free摆放着一对儿没有用处的LOCK和UNLOCK,【Python 2.5.2】,不知道是不是因为我没有实际调试的缘故,还没有发现这个宏的玄机。

老实说,我跟内存泄露做了好多年的斗争了,这次又从中学到了很多东西(也有从其他的资料),结合我曾经写过的Ref类中使用的内存池,这次构造了一个全新的内存池,希望可以有用武之地。
注:

【1】我没有考证过最初的Python源代码,但是印象里最初的Python只有引用计数机制,特别是Ruby 1.9才引入垃圾回收,而以往是采用引用计数技术的。

【2】简直是迫使我查看JVM的源代码了,但是到了64位的平台上,这个结构可能发生更大的变化。

【3】等到我完成了代码,才能兑现这段话,到时候我会Open Source的。

【编辑推荐】

  1. 有关Python系统文件进行介绍指导
  2. 如何正确的使用Python函数
  3. 对Python 构建工具进行详细介绍分析
  4. PythonAndroid浅析Python优势所在
  5. 如何使用Python模块解析配置文件?

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...