为什么移动平台不支持分代垃圾回收?


11

Windows Phone / Xbox和Android都不支持分代垃圾回收。这让很多程序员感到沮丧。似乎有合理的工程原因,但我无法弄清楚。

当前的电话比2001年运行带有世代GC的.NET 1.1的台式机/笔记本电脑具有更多的内存和更好的CPU,我无法想到ARM处理器在世代GC上比x86差的任何原因。在电话和控制台上对多任务的需求也减少了,因此有相对更多的可用堆空间。

那有什么呢?

编辑:需要澄清的几点:

  • 这些平台专门为应用程序使用垃圾收集,因此我的问题不是关于为什么不支持GC的问题;我的问题是关于为何不进行分垃圾回收。
  • 人们对缺乏世代GC感到沮丧的原因是非世代GC效率极低。(这意味着电池寿命不是原因。)
  • 我确实认为,缺乏世代GC支持是有诚实的技术原因。这不是一个反问。

Windows Phone(当前版本)确实具有垃圾回收功能。它仅在设备内存不足时运行msdn.microsoft.com/en-us/library/gg490770.aspx
Tom Squires

@TomSquires实际上,WP7上的GC每1MB分配运行一次。我认为您可能正在考虑任务管理器调整旧流程。

Answers:


5

我认为最大的问题是电池寿命。垃圾回收是一种开发人员的便利,它以用户计算机上额外的CPU周期为代价购买。当您的CPU插入(台式机)或具有相对较大的电池(笔记本电脑)时,您的用户将更愿意为CPU进行垃圾收集时消耗的额外能量来为开发人员带来便利。当电池相对较小时,用户可能不那么慷慨。他们可能想要自己的附加酒吧-也许与他们的朋友交谈,或者在与愤怒的小鸟致命的相遇中杀死几头额外的猪。

无论用户是出于什么原因,OS开发人员都不想让人们意识到运行OS的设备比运行竞争对手OS的设备耗电更快。因此,他们以开发者的便利为代价,更好地了解了设备的预期电池寿命:对他们而言,只要用户对设备感到满意,您的痛苦就没什么大不了的。


3
实际上,在大多数情况下,分代GC效率更高,因此您可能会认为它可以减少时钟周期数。它也没有解释为什么类似的Xbox没有代GC,因为Xbox游戏机的插入。
丽宫坂

好吧,这就是我在Stack Overflow上听到的。我对XBox-es不太了解。
dasblinkenlight 2012年

3
那仍然不能回答问题。即使垃圾回收比显式分配使用了更多功能(这值得商--我也不会讨论),问题不是/为什么显式分配比移动设备上的GC好,而是/为什么非-在移动设备上,世代GC优于世代GC。
宫阪丽

1
@Rei:游戏通常要求所有事物都是确定性的;至少,他们需要可预测的性能。在不可预知的时间,这里浪费了几纳秒,那里浪费了几纳秒,这可能会破坏游戏体验。世代垃圾收集器是不可预测的。
2012年

2
@djacobson我认为那不是真的。就像我在问题中说的那样,如果只是微软的平台忽略了世代GC,那么这可能只是后勤/官僚主义的原因,我不会打扰。但是Android也遇到同样的问题,因此这可能是技术原因,这意味着P.SE上的某个人可能有明确的答案。
宫阪丽

3

我最好的猜测是,这不是技术原因,但是这些电话平台的开发人员还没有投入任何精力。我知道这不是您想要的答案,但是如果您进行了任何移动开发,您可能已经注意到了很多悬而未决的成果。他们可能根本没有时间来编写多个GC实现,对它们进行微调,然后选择最适合的实现。为什么有人会花时间重新发明轮子,而可以发布新的,浮华的,思想欠佳的API?;)

FWIW,作为我的理论确认,Android的新运行时(ART)确实具有分代GC,并且他们计划在将来使用紧凑型GC


2

代际垃圾收集有一些额外的成本。

分代收集器需要能够找出较旧的对象何时指向较新的对象。我们无法追溯到较早的对象来找到这些情况,因为这将破坏世代收集的目的。相反,我们需要以某种方式检测出这种情况何时发生,并在收集阶段进行记录。无论您打算如何做,都会为收集过程增加一些开销。

在台式机系统上,您的操作系统正在忙于做各种事情,而这些事情都是在后台进行的。它支持诸如在进程之间共享页面,将未使用的页面写入磁盘,提供进程之间的内存映射等功能。我的理解是,那里使用的某些功能可以更有效地跟踪更改的指针。该操作已经担心您在内存中所做的更改,因此将这些信息用于新用途不是问题。

我怀疑移动系统不会在幕后做所有相同的事情。结果,他们所获得的信息级别与台式机不同。因此,实现一般集合所涉及的开销较高,不太值得。


要最大程度地利用GC生成的优势,需要使用写入围栏来检测何时写入较早的对象。另一方面,即使GC的“标记”部分不能从后代中受益,我认为只要移动新一代的东西(实际上,对较早的一代进行“标记”阶段),仍然可以提高性能。如果它允许人们知道每一代中存在多少可回收的内存,那么更新的版本也会很有用)。
2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.