【问题标题】:H/W Assisted Garbage Collector硬件辅助垃圾收集器
【发布时间】:2014-11-15 14:22:26
【问题描述】:
我正在考虑减少内存受限系统(例如移动设备)中垃圾收集器的开销。开销是指暂停时间,或垃圾收集所花费的总执行时间的一部分。我开始了解有关硬件辅助垃圾收集器的一些知识,并且我对研究它很感兴趣。
我想知道,在这方面都做了什么。
我可以使用模拟器来估计我的垃圾收集器的效率还是我必须在芯片上制作我的设计?有没有可以运行java程序的模拟器。
【问题讨论】:
标签:
java
garbage-collection
simulator
【解决方案1】:
有一个working approach to HW supported GC:
Cliff Click 写道:我们专门为 Java 做的事情:
GC read-barrier 支持完全并行和并发的 GC;我们可以无限期地维持 400G 堆上的 40G/秒分配,最大暂停时间约为 10-20 毫秒。这种 uber-GC 部分是因为读取障碍而成为可能的(部分是因为我们“拥有”操作系统并且可以玩主要的页面映射技巧)。
还有
read-barrier 将在失败时进行快速陷阱,并在默认情况下在陷阱处理程序中提升为 GC 模式。这让出错的 CPU 修复对象引用并继续,而无需等待 GC 赶上。
当然,整本书都值得一读。你很可能想看这个video。
【解决方案2】:
我想知道,在这方面都做了什么。
如果您回到 1980 年代,Symbolics 3600(又名 Lisp 机器)具有对标记内存和写入屏障的硬件支持。后来也有关于该主题的学术工作。然而,公认的观点是支持垃圾收集的专用硬件并不具有成本效益 [1](第 221 页)。
我可以使用模拟器来估计我的垃圾收集器的效率还是我必须在芯片上制作我的设计?
我想这两种方法都行得通(只要付出足够的努力),但两者都存在使它们难以“执行”的问题,并且都没有解决你发现的任何东西是否可能在商业上可行的问题。
在开始(认真地)讨论这个主题之前,您应该彻底回顾以前的研究。至少掌握下面的书籍,找到并阅读他们参考的有关硬件 gc 支持的论文和文章。
有没有可以运行java程序的模拟器。
您正在谈论一个硬件模拟器,它将运行编译为模拟硬件(假设)指令集的程序。您项目的一部分将是实现 Java 编译器后端以在该指令集中生成代码。
这样的模拟器+编译器可能存在,但你可能无法使用它。
参考资料:
[1]“垃圾收集:自动内存管理算法”,R. Jones 和 R. Lins,Wiley,1996 年。
[2] R. Jones、A. Hoskings 和 R. Moss 撰写的“垃圾收集手册:自动内存管理的艺术”。查普曼和霍尔,2011 年。