java - 用垃圾收集语言实现垃圾收集器有意义吗

标签 java compiler-construction garbage-collection interpreter vm-implementation

我想用 Java 或 Haskell 实现垃圾收集器 (GC),但这有意义吗?

我能否控制何时启动我自己的 GC 实现而不是实现语言的 GC?

我猜这个问题可以有三种答案:

  1. 在运行禁用实现语言的 GC 的虚拟机 (VM) 时设置一个标志。
  2. 使用一种特殊的结构让我管理自己的内存,例如使用连续传递风格 (CPS) 来管理我自己的评估策略。
  3. 不,使用没有 GC 的语言。

看看这些:

  1. 我更喜欢第二个选项,因为我将能够在所有语言中使用该结构。
  2. 我不喜欢第一个选项,因为我还必须管理我的解释器的内存。
  3. (我也不喜欢第三种选择,但我无法控制)

这不是 I build a interpreter on a language with a garbage collector. I need a garbage collector for the interpreter? 的副本因为我不想想用底层 GC 引导我的解释器。

最佳答案

在 IT 领域,答案通常是:视情况而定

您的解释器控制上下文中的所有“对象”时;那么当然,您的解释器可能会保留所有“它的”对象的列表。因此,即使这些对象以某种方式对 JVM 可见,它们也都是可访问的,因此是 Activity 的;因此它们不会受到 JVM gc 的影响。

但是当您以某种方式将您的解释器处理的对象“嵌入”到周围的 java 上下文中时 - 那么 JVM gc 可能会负责它们。

从那里开始,答案将转向:是的,这可能是可能的。但除此之外;这实际上取决于您的目标和驾驶要求。你是为了纯粹的教育目的而实现这个吗?或者您是否有兴趣创造某种对其他人具有“真实”值(value)的“真实”产品?

如果是后者,那么您可能希望将您的解释器非常紧密地嵌入到 JVM 中 - 以便从将 JVM 变成今天这个伟大平台的大量投资中获益。你看,近 20 年的研究进入了当前的 JVM JIT 编译器和 GC 技术。你想利用它来“做你自己的事”......

因此,正如概述的那样:这在很大程度上取决于您的“真实”目标。

最后:您可能会找到这个 SE-Radio podcast在 JRuby 和 JVM 平台上对您的问题有帮助。 JRuby 人员对标准 Ruby 引擎的性能很不满意;他们选择 JVM 作为构建更好 Ruby 引擎的平台...

关于java - 用垃圾收集语言实现垃圾收集器有意义吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43789590/

相关文章:

java - 如何录制声音并将其从 Web 应用程序发送到服务器?

java - 无法打包 Grails 3 应用程序 - NoSuchMethodError

java restful 服务作为 jar 对 war 的依赖

compiler-construction - 编译器AST如何实现语句和表达式

performance - 有效区分关键字和标识符

c# - 如果本地(但未使用)变量是对对象的唯一强引用,那么符合标准的 C# 编译器能否优化掉它?

java - 如何将字符附加到文件中的一行文本?

编译器和解释器之间的混淆?

garbage-collection - 由于 GC,Cassandra 修复失败

java - 未关闭的扫描仪的垃圾收集