jvm 为什么Android VM不使用G1垃圾收集器

vnzz0bqm  于 2022-11-07  发布在  Android
关注(0)|答案(2)|浏览(190)

链接到https://developer.android.com/topic/performance/memory-overview#gc,Android当前的gc似乎是CMS。
有了g1好处,为什么android不使用g1?

mf98qq94

mf98qq941#

你的问题是基于一些错误的前提:

  1. Android不使用OpenJDK CMS收集器。它有自己的垃圾收集器。
  • 您链接到的页面未提及OpenJDK或CMS:
  • 它确实说Android GC是分代的,但是很多很多收集器都是分代的。
  • 它并没有说Android收集器是 * 并发 * 的,这是CMS和G1的重要特性之一。
  • Android不是基于OpenJDK代码库的。因此,如果不(可能)完全重写,OpenJDK垃圾收集器将无法在Android中工作。
  • OpenJDK受GPLv 2的保护,并带有类路径扩展,因此源代码在技术上可以移植。然而,版权仍然属于Oracle。我无法想象谷歌会想将任何Oracle版权代码合并到Android代码库中。(特别是考虑到Oracle利用诉讼来获得竞争优势的不愉快历史。)
  • Android和OpenJDK对平台的要求有很大的不同。例如,OpenJDK针对运行服务而不是应用进行了优化。G1在典型企业服务器上的吸引力并不一定与在移动的上运行的“应用”相匹配,例如,在手机上,内存和内核较少,功耗/电池寿命是关键问题。

简而言之,Android支持G1收集器并没有多大意义,而且这种情况也不太可能发生。

icomxhvb

icomxhvb2#

G1垃圾收集器是Oracle JVM的一项功能,但Android不使用Oracle JVM。此外,从设计Angular 来看,G1 GC不适合移动的设备,这可能是Android或Dalvik运行时中没有实现类似算法的原因之一。来自this page
Garbage-First(G1)收集器是一种服务器样式的垃圾收集器,适用于具有大内存的多处理器计算机。
此外,其存储器开销较高,这对于资源受限的移动的设备是有问题的:
如果从... CMS收集器迁移到G1,则可能会看到较大的JVM进程大小。这主要与“记帐”数据结构(如记忆集和收集集)有关。

相关问题