你们越说越复杂(且不正确)了。
一般对语言是否有gc的概念很简单:
缺省所有内存都自动回收,也许可以显式分配不自动回收的内存(opt-out):语言有gc。
需要手动使用某个库(即使是标准库)对一部分内存实现自动回收(opt-in):语言没有gc。
【 在 eGust 的大作中提到: 】
: 引用计数怎么到你那里就变成 gc 了?上个世纪在 gc 出来之前 reference counting 就在用了,比如早期的 delphi、win com,对循环引用的处理方式就是不处理。
: 为了解决循环引用问题,有两种方案,一种是 weak reference,说白了还是不处理;另外一种才是用 gc 来解决。而在实践中如果一门语言高度依赖 reference counting,那么基本上都是不处理的,换句话说由程序员负责 weak reference,写错了就泄露。
: 道理很简单,引用计数的 overhead 非常高。而 gc 的问题只是发生回收时的高延迟,它本身不破坏执行流水过程,不破坏 cpu cache,反倒提高了不发生回收时的运行速度。所以在实践中 gc 跟 reference counting 是对立的概念,如果说有 gc,那不大可能是基于引用计数实现的,反过来如果说用了 arc,那大概率就得你自己管 weak reference。
: ...................
--
FROM 61.170.164.*