非解释语言可以有垃圾收集器吗?

Gee*_*eek 5 java language-agnostic interpreter garbage-collection

非解释语言是否可能有垃圾收集器.解释语言让解释器逐行执行程序,因此解释器也可以提供GC的运行时.但是,如果不在代码本身中构建GC,是否可以为任何其他语言使用垃圾收集器?

sha*_*oth 11

垃圾收集只需要将指针变量标记为特殊方式,以便运行时可以识别它们并用于垃圾收集.它与解释/编译无关,而是需要特殊的运行时并为每个变量存储附加数据.

  • 解释良好的语言为您提供运行时。至少解释器更容易作为运行时工作并运行垃圾收集器。任何本机语言都会有操作系统作为运行时吗?因此没有GC? (2认同)
  • 即使没有以特殊方式标记指针变量,您也可以使用所谓的保守GC将所有内存内容视为潜在指针.在另一个答案中见Boehm的GC. (2认同)

Mar*_*ell 6

好吧,.NET语言(发送到IL-C#,VB.NET,MC++等)不被解释(特别是如果你使用NGEN) - 并且有完整的垃圾收集.

同样,Java.

  • *有时*它被解释.但不是经常."Java被解释"的陈述是*非常*误导. (4认同)
  • 总结一下:Java/C#被编译为字节码/ IL.那个字节码/ IL通常是*(大多数执行时间,大多数环境)JIT编译的; 偶尔会被解释.调用Java和C#"解释语言"是一个错误. (3认同)
  • @Marc:我说Java*源代码*永远不会被解释,但Java字节码可能是.在现实生活中,它被简要解释,然后JIT编译.在.NET中,IL永远不会被解释 - 但是Mono有一个IL解释器.请注意,JavaScript并不总是被解释 - 现代JS引擎进行JIT编译. (2认同)

S.L*_*ott 0

是的。

当智能指针引用计数变为零时,具有智能指针实现的 C++ 将进行垃圾收集。

你有垃圾收集。您没有自己构建它。