我在想这个问题,因为操作系统负责内存管理。为什么编程语言必须实现自己的垃圾回收器?
我在想这个问题,因为操作系统负责内存管理。为什么编程语言必须实现自己的垃圾回收器?
free()
函数,虽然该语言不支持自动垃圾回收(GC),但它仍可以使用操作系统强制实施的 GC 功能。 - Ignacio Vazquez-Abrams垃圾回收需要操作系统知道什么是垃圾,什么不是垃圾,最简单的方法就是某种类型安全保证。一些实验性的操作系统,例如Es和Singularity,在内核级别提供类型安全的语言运行时:Es中使用JavaScript,Singularity中使用C#变体。但大多数内核都设计为允许在流行的类型不安全语言(例如C++)中运行应用程序。在这种情况下,内核所能做的就是回收已终止进程占用的内存。
因此,大多数内核将属于特定进程的内存管理委托给语言运行时。所有主要桌面操作系统的默认安装都包括多个垃圾收集语言运行时,可以在其中运行应用程序。
垃圾回收将由我们自己的软件处理,在编写软件的过程中,这是很复杂的,并需要开发人员具有先进的经验。
通常,用C和C ++编写的程序不像用Java或PHP编写的程序那样具有自动内存管理。这意味着用C++编写的程序需要程序员定义当不再使用时,软件使用的数据将从内存中删除。
因此,您使用的许多程序都是使用C和C ++编写的,并且在大多数情况下,内存管理并不十分高效。当运行这些程序时,您的内存将包含许多不再使用的碎片,这是程序的失败。我所知道的唯一替代方案是重新启动计算机。
我认为操作系统本身应该有一些工具来“清理未使用的内存空间”,就像Android一样(例如Ccleaner)。