问题 Hans Boehm GC有哪些替代品用于小型设备?


我想将像NekoVM这样的虚拟机用于小型设备,但是为了构建它,它需要Boehm GC,但是那个小型设备没有那个GC的端口,所以我想知道是否有任何替代它,某些东西那可以用C代码完成吗?


10332
2018-01-08 11:59


起源



答案:


我想说你最好的选择是将GC移植到你的平台上,为此有指示(libgc移植指令)。

此外,应该可以交换GC实现(NekoVM常见问题解答),请参阅vm / alloc.c文件。

编辑

希望有用的额外链接:(未经测试)


4
2018-01-12 08:24



你可以添加我的 Qish GC 即使我不再工作了...... - Basile Starynkevitch
@downvoter:这个答案有什么问题吗?评论有助于改善它。 - Hasturkun


答案:


我想说你最好的选择是将GC移植到你的平台上,为此有指示(libgc移植指令)。

此外,应该可以交换GC实现(NekoVM常见问题解答),请参阅vm / alloc.c文件。

编辑

希望有用的额外链接:(未经测试)


4
2018-01-12 08:24



你可以添加我的 Qish GC 即使我不再工作了...... - Basile Starynkevitch
@downvoter:这个答案有什么问题吗?评论有助于改善它。 - Hasturkun


也许你会更好 LUA,它有一个非常小但功能强大的虚拟机,内置了自己的垃圾收集器,可在支持ANSI标准C的任何平台上运行。只需稍加努力,您甚至可以在缺少标准输入和标准输出的机器上构建Lua 。我看到Lua在一个嵌入式设备上运行 小型LCD触摸屏,背面嵌有嵌入式CPU。 Neko是很好的工作,但我认为你会发现Lua一点都令人满意。


3
2018-01-08 20:34



我知道Lua有自己的垃圾收集器,但是如果你看看NekoVM他们使用libgc而不是像Lua那样的GC,因为它不如libgc好。我正在寻找像libgc这样的通用GC,我可以在nekoVM上取代它 - Paulo Lopes
汉斯已经花费了20多年的时间来改善libgc。期望找到高性能收集器的直接替代品是不现实的。期望在小型设备上使用高性能GC也是不明智的。您的问题要求“像NekoVM一样的虚拟机”。 Lua有资格。 - Norman Ramsey
汉斯可能花了20多年的时间来改进libgc,但与大多数准确的垃圾收集器相比,它的性能非常糟糕。 - Jon Harrop
如果你做错了20年的设计,那根本就没有用。 libgc适用于小数据量。它在2013年变得更糟。 - Lothar


我可以推荐TinyGC(tinygc.sf.net) - 一个针对小型设备的BoehmGC的独立轻量级实现。它与BoehmGC v7 +完全API兼容(甚至更多,二进制兼容),但只实现了API的一小部分(但足以用于类似Java / GCJ的内存管理),并且没有自动线程和静态数据根注册。然而,后者可能需要做一些努力才能使NekoVM使用它(即调用GC_register_my_thread()和GC_add_roots())。


3
2017-12-20 16:59





为了支持这一点,有一个VMKit(LLVM)演示文稿,它将Boehm GC显示为 可能的瓶颈 表现。


2
2018-01-19 14:16



是的,如果他们有更好的GC,我会真正开始使用VMKit。当您运行安全语言时,Boehm GC速度过慢。 - Zifre
@Zifre:FWIW,编写精确的GC非常简单。我在HLVM中所做的实现只有大约100行代码...... - Jon Harrop


我的建议是为Neko写一个准确的GC,如果还不存在的话。我不会用驳船杆接触Boehm的GC ......


1
2017-09-25 18:19