内存管理是计算机科学的一个复杂领域,目前正在开发许多技术来提高其效率。
内存管理通常分为三个区域
内存管理通常分为三个区域,尽管区别有点模糊:
- 硬件内存管理
- 操作系统内存管理
- 应用程序内存管理
管理内存的基本问题是知道什么时候保留它包含的数据,什么时候丢弃它,以便可以重用内存。这听起来很容易,但实际上是一个难题,它本身就是整个研究领域。在理想的世界中,大多数程序员都不必担心内存管理问题。不幸的是,在手动和自动内存管理中,不良的内存管理实践可以通过多种方式影响程序的健壮性和速度。
自动内存管理是一种服务,可以作为语言的一部分或作为扩展,自动回收程序不会再使用的内存。自动内存管理器(通常称为垃圾收集器,或简称为收集器)通常通过回收程序变量无法访问的块(即,后续指针无法访问的块)来完成其工作。
自动内存管理
自动内存管理的优点是:
- 程序员可以自由地处理实际问题;
- 模块接口更清洁;
- 内存管理错误更少;
- 内存管理通常更有效。
自动内存管理的缺点是:
- 内存可能会保留,因为它可以访问,但是不会再次使用;
- 自动内存管理器(当前)具有有限的可用性。
执行内存自动回收的方法有很多,回收技术中讨论了其中几种。
大多数现代语言主要使用自动内存管理: BASIC,Dylan,Erlang,Haskell,Java, JavaScript,Lisp,ML,Modula-3, Perl,PostScript,Prolog,Python, Scheme,Smalltalk等。
Python中的垃圾回收
Python在多种虚拟机上运行着几种实现:原始的“ CPython”实现在其自己的虚拟机上运行;IronPython在公共语言运行时上运行;Java虚拟机上的Jython。
CPython通过混合使用引用计数和不移动的 标记清除 垃圾收集来管理内存。引用计数可确保在对象的引用计数降至零时迅速删除对象,而垃圾回收器则回收循环数据结构。
__del__
和弱引用(通过 weakref模块)。
Python中的垃圾回收是以引用计数为主,分代收集为辅。引用计数的缺陷是循环引用的问题。
在Python中,如果一个对象的引用数为0,Python虚拟机就会回收这个对象的内存。