Lit*_*per 4 java compiler-construction interpreter garbage-collection vm-implementation
我想在Java或Haskell中实现垃圾收集器(GC),但这有意义吗?
我是否能够控制我自己的GC实现何时启动而不是GC的实现语言?
我想这个问题可以有三种答案:
看看这些:
这与我在带有垃圾收集器的语言上构建解释器并不重复.我需要一个翻译垃圾收集器?因为我不希望我的引导与解释底层GC.
正如在IT中经常这样,答案是:它取决于.
当您的口译员在您的语境中控制所有"对象"时; 当然,你的翻译可能会保留所有"它"对象的列表.因此,即使这些对象以某种方式对JVM可见,它们也都可以访问,因此它们是活的; 所以他们不能接受JVM gc.
但是当你以某种方式"将"解释器处理的对象"嵌入"到周围的java上下文中时 - 那么JVM gc可能会对它们负责.
从那里开始,答案就会朝着这个方向发展:是的,这可能是可能的.但除此之外; 这实际上取决于你的目标和驾驶要求.您是否为纯粹的教育目的实施此项目; 或者您是否有兴趣创建某种对其他人具有"真正"价值的"真实"产品?
如果是后一种情况,那么您可能希望将解释器与JVM紧密地嵌入 - 以便从将JVM变为今天的优秀平台的大量投资中获益.你看,近20年的研究进入了当前的JVM JIT编译器和GC技术.你想利用它来"做你自己的事情"......
因此,如上所述:它在很大程度上取决于您的"真实"目标.
最后:您可能会发现JRuby和JVM平台上的这个SE-Radio 播客对您的问题有帮助.JRuby人员对标准Ruby引擎的性能不满意; 他们选择JVM作为平台来构建更好的 Ruby引擎......
有什么意义?如果你想实现自己的GC只是为了学习涉及的算法,那也没关系。GC 基本上只管理相互引用的资源,直到它们不再引用为止。这在 Java 和其他 GCed 语言中完全可行。您只需调用该对象的另一个方法并将其从“活动”对象列表中删除,而不是释放内存。
对于运输产品?没有把握。您可以利用实现语言中的现有机制,但 GC 通常需要控制何时应放弃内存。如果实现语言阻止了这一点,那就是一个问题。