垃圾收集的最后十年总结?

时间:2010-05-26 17:42:23

标签: garbage-collection

我一直在读琼斯&关于垃圾收集的书籍,于1996年出版。

显然,从那时起,计算世界发生了巨大变化:多核,带有大缓存的无序芯片,以及桌面中更大的主内存。对于大多数面向消费者的系统,全世界也或多或少地选择了x86和ARM微体系结构。

自从开创性的书出版以来,最重要的进展是什么?

我特别关注论文,算法,学位论文等的指点,代表了理论和论文的进步。垃圾收集的实践。

3 个答案:

答案 0 :(得分:3)

JVM上的GC进展:

JVM的G1似乎在表上带来了一些新的改进(对于JVM至少)

  

G1是一个“服务器式”GC并拥有   以下属性。

     

并行和并发。 G1需要   并行性的优点   今天存在于硬件中。它使用所有   可用的CPU(核心,硬件   线程等)加快其速度   当一个人停下来时,“停止世界”会停顿   应用程序的Java线程已停止   启用GC。它也有效   与运行Java线程同时发生   最小化整个堆操作   在停止世界停顿期间。

     

分组。与其他HotSpot一样   GC,G1是世代的,意思是它   对待新分配的(又名年轻人)   已经存在的物体和物体   一段时间(又名旧)不同。   它集中了垃圾收集   对年轻物体的活动,就像它们一样   最有可能的   可回收,同时访问旧   对象很少。对于大多数Java   应用程序,分代垃圾   收藏有很大的效率   优于其他方案的优势。

     

压缩。与CMS不同,G1执行   随着时间的推移堆压缩。压实   消除潜在的碎片   问题确保顺利和   持续的长期运行。

     

可预测性。 G1预计会是   比CMS更可预测。这是   很大程度上是由于消除了   碎片问题可以   对世界各地的停顿产生负面影响   在CMS中的时间。另外,G1有一个   暂停预测模型,在很多   情况,允许它经常见面   (或很少超过)暂停时间   目标

G1 Link

HotSpot 6似乎有很多garbage collectors你可以选择。

答案 1 :(得分:1)

据我所知,过去十年中垃圾收集技术的大部分进展都处于“实用”方面:算法已知,但对多核系统和观察到的使用模式进行了一些相当大的调整。该研究的很大一部分是由Sun和IBM在Java的背景下完成的(令人惊讶的是,Jones& Lins书中提供的大多数使用模式分析都是关于Lisp及其单链表;现在论文谈论关于Java)。来自Sun的G1算法建立在琼斯和琼斯的老想法之上。 Lins书 - 但Sun(现在的Oracle)的人们努力寻找哪种组合最有效率。

关于分布式垃圾收集的研究也很多 - 如何在分布式计算的常见挑战性条件下对分散在不同系统上的数据对象进行GC管理:网络速度慢,节点可能彼此不等,某些节点可能会失败。总体结论似乎是它不起作用(研究发现更多)。已经实现了具有引用计数的限制版本(用于对位于另一个系统上的对象的引用)(例如,在Java的RMI中),并且似乎在跨节点没有引用循环的上下文中工作。

答案 2 :(得分:0)

这是我之前遇到过的,现在只记得它:

Java中的FPGA感知垃圾收集

  

在本文中,我们提出了新颖的工作   实际上启用HW组件   创建并保留对它的引用   动态分配的对象。以来   HW组件现在可以保存对象,   Java垃圾收集器需要   意识到这些存在   对象引用以便nd all   仍在使用的物品。

Link to PDF Paper