Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用带有垃圾回收的语言实现垃圾回收器有意义吗_Java_Compiler Construction_Garbage Collection_Interpreter_Vm Implementation - Fatal编程技术网

Java 用带有垃圾回收的语言实现垃圾回收器有意义吗

Java 用带有垃圾回收的语言实现垃圾回收器有意义吗,java,compiler-construction,garbage-collection,interpreter,vm-implementation,Java,Compiler Construction,Garbage Collection,Interpreter,Vm Implementation,我想用Java或Haskell实现垃圾收集器(GC),但这有意义吗 我是否能够控制何时启动我自己的GC实现而不是实现语言的GC 我想这个问题有三种答案: 在运行禁用实现语言GC的虚拟机(VM)时设置标志 使用一种特殊的结构让我能够管理自己的记忆,比如使用连续传递样式(CPS)来管理自己的评估策略 不,使用没有GC的语言 看看这些: 我更喜欢第二种选择,因为我将能够在所有语言中使用该结构 我不喜欢第一个选项,因为我还必须管理我的解释器的内存 (我也不喜欢第三种选择,但我无法控制) 这不是重复的,因

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

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

我想这个问题有三种答案:

  • 在运行禁用实现语言GC的虚拟机(VM)时设置标志
  • 使用一种特殊的结构让我能够管理自己的记忆,比如使用连续传递样式(CPS)来管理自己的评估策略
  • 不,使用没有GC的语言
  • 看看这些:

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

  • 这不是重复的,因为我不想用底层GC引导我的解释器。

    正如在解释器中经常遇到的那样,答案是:这取决于

    当您的解释器控制您上下文中的所有“对象”时;当然,您的解释器可能会保留所有“其”对象的列表。因此,即使这些对象在某种程度上对JVM是可见的,它们都是可访问的,因此是活动的;因此,它们不能受制于JVM gc

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

    从这一点出发,答案是:是的,这是可能的。但除此之外;这取决于你的目标和驾驶要求。你实施这项计划纯粹是为了教育目的吗;或者你有兴趣创造一些对其他人有“真正”价值的“真正”产品吗

    如果是后一种情况,那么您可能希望将解释器与JVM紧密地结合在一起,以便从将JVM变成今天的伟大平台的巨大投资中获益。您知道,近20年的研究都是针对当前的JVM JIT编译器和GC技术的。你想利用它来“做你自己的事”吗

    因此,正如所概述的:这在很大程度上取决于你的“真正”目标


    最后:您可能会发现JRuby和JVM平台上的SE广播在您的问题上下文中很有帮助。JRuby的人只是对标准Ruby引擎的性能不满意;他们选择JVM作为构建更好的Ruby引擎的平台…

    你显然已经对这个问题下了决心。从远程来看,一个人提出的GC方案可能会比JVM已经提供的更好。但是请考虑一下:在所有被移植到JVM的语言中,所有聪明的开发人员,有多少人没有使用JVM,包括它的GC? 不过,这是一个意见和实验的问题。希望我们都有智慧将一个想法作为一个假设,并在转向一个潜在的错误方向之前试图反驳它。如果它经得起反驳的尝试,那么就去做吧


    我建议使用您自己设计的一个相对健壮的示例应用程序实际编程不同的方法。找出GC有效性的指标。弄清楚写自己的代码需要付出多少努力,以及它如何影响衡量好坏的标准。那么,你自己的经验将指导你。

    对什么有意义?如果您想实现自己的GC只是为了学习所涉及的算法,那没关系。GC基本上只是管理相互引用的资源,直到它们不引用为止。这在Java和其他GCed语言中是完全可行的。您只需调用对象上的另一个方法并将其从“活动”对象列表中删除,而不是释放内存


    对于运输产品?不确定。您可以利用实现语言中现有的机制,但GC尤其需要控制何时应该释放内存。如果实现语言阻止了这一点,那就是一个问题。

    如果用Java编写程序,JVM的GC将自动管理程序的内存。您现在想要为另一种编程语言实现一个新的GC,但它也是一个程序。所以JVM的GC将为您自己的GC管理内存,然后您自己的GC将为目标编程语言管理内存

    问题是,如果JVM的GC停止世界,它将停止您自己的GC,您自己的GC也将停止您的目标编程语言的世界


    所以,是的,您可以用Java或其他语言用GC实现自己的GC,但这不是必需的。如果您自己的GC不会由其他GC管理,那没关系。

    可能有点宽泛;但对于新手来说,这仍然是一个不错的问题;带着一些有趣的想法。让我投赞成票。。。万一你想练习你新获得的投票权;我很乐意协助练习;-)我完全同意@GhostCat的评论。问得好;)我必须承认:我也倾向于同意卢的答案——你可以尝试建立你的世界心理模型。在概述你的问题时限制可能的答案并没有什么帮助。避免形成你要求输入的人的想法。你想要的是他们的想法,而不是你对他们想法的看法!难道我不该把我之前的想法说出来吗?我认为这可能会限制可能的答案,但我希望这也能澄清问题,可能更多的是关于措辞。例如,你可以说:“我看到了以下选项……但是还有其他选项吗?”或者类似的话。非常感谢你,先生!第二和第三段回答了我的问题,谢谢。该项目用于非优化GC的教育目的。那么,n