我一直在阅读1996年出版的Jones & Lins关于垃圾回收的书。
显然,自那以后,计算机世界发生了巨大变化:多核、乱序芯片带有大缓存,桌面上的主内存甚至更大。世界也基本上为大多数面向消费者的系统选择了x86和ARM微架构。
自开创性的书籍出版以来,最重要的进展是什么?
我特别寻找指向论文、算法、论文等方向的指针,这些方面代表了垃圾收集的理论和实践的进步。
我一直在阅读1996年出版的Jones & Lins关于垃圾回收的书。
显然,自那以后,计算机世界发生了巨大变化:多核、乱序芯片带有大缓存,桌面上的主内存甚至更大。世界也基本上为大多数面向消费者的系统选择了x86和ARM微架构。
自开创性的书籍出版以来,最重要的进展是什么?
我特别寻找指向论文、算法、论文等方向的指针,这些方面代表了垃圾收集的理论和实践的进步。
JVM上的GC进展:
JVM中的G1似乎在桌面上带来了一些新的改进(至少是对于JVM而言)。
G1是一种“服务器风格”的GC,具有以下特点。
并行和并发。G1利用当今硬件中存在的并行性。它使用所有可用的CPU(核心、硬件线程等)来加速其“停止整个世界”的暂停,当应用程序的Java线程停止以启用GC时。它还与正在运行的Java线程同时运行,以最小化在停止整个世界的暂停期间进行全堆操作。
分代。与其他HotSpot GC一样,G1是分代的,意味着它对新分配(称为年轻)的对象和存活一段时间的对象(称为老对象)有不同的处理方式。它集中垃圾回收活动在年轻对象上,因为它们最有可能被回收,同时很少访问旧对象。对于大多数Java应用程序而言,分代垃圾回收比备选方案具有重要的效率优势。
压缩。与CMS不同,G1随着时间的推移执行堆压缩。压缩消除了潜在的碎片问题,以确保平滑和一致的长时间运行。
可预测性。 G1预计比CMS更具可预测性。这主要是由于消除了在CMS中可能会对暂停时间产生负面影响的碎片问题。此外,G1具有暂停预测模型,在许多情况下,它可以经常达到(或很少超过)暂停时间目标。
HotSpot 6似乎有许多可供选择的垃圾收集器。
此外,还有很多关于分布式垃圾回收的研究——如何管理分散在不同系统上的数据对象,以及如何应对分布式计算中常见的挑战性条件:网络速度慢、节点可能不等同于彼此、某些节点可能会发生故障等。总体结论似乎是它不起作用(有更多的研究而非结果)。引用计数的限定版本(用于引用位于另一系统上的对象)已经被实现(例如在Java的RMI中),并且在不存在跨节点的引用环的情况下似乎可以正常工作。
这是我早些时候遇到的东西,现在才想起来:
在Java中实现FPGA感知垃圾回收
在本文中,我们提出了一项新颖的工作,使HW组件能够实际创建和保存对动态分配对象的引用。由于HW组件现在可以持有对象,因此需要让Java垃圾收集器意识到这些对象引用的存在,以便查找仍在使用的所有对象。