为什么安卓虚拟机不使用G1垃圾回收器



链接到https://developer.android.com/topic/performance/memory-overview#gc,android当前gc似乎是CMS。

有了g1的好处,为什么android不使用g1?

您的问题基于许多错误前提:

  1. Android不使用OpenJDK CMS收集器。它有自己的垃圾收集器。

  2. 您链接到的页面没有提到OpenJDK或CMS:

    • 它确实说安卓GC是一代人的,但很多很多收集器都是一代的
    • 它并没有说Android收集器是并发,这是CMS和G1的重要特征之一
  3. Android不是基于OpenJDK代码库的。因此,如果没有(可能(完全重写,OpenJDK垃圾收集器将无法在Android中工作。

  4. OpenJDK由GPLv2通过类路径扩展覆盖,因此从技术上讲,源代码可以移植。但是,版权归Oracle所有。我无法想象谷歌想要将任何甲骨文版权代码纳入安卓代码库。(特别是考虑到甲骨文利用诉讼获得竞争优势的不愉快历史。(

  5. Android和OpenJDK的平台要求明显不同。例如,OpenJDK针对运行服务而非应用程序进行了优化。使G1在典型的企业服务器上具有吸引力的特性不一定是"G1"的良好匹配;应用程序";在某人的手机上运行,(例如(RAM和内核更少,功耗/电池寿命是关键问题。

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

G1垃圾收集器是Oracle JVM的一个功能,但Android不使用Oracle JVM。此外,从设计角度来看,G1 GC不适合移动设备,这可能是为什么类似算法没有在Android或Dalvik运行时中实现的一个因素。从此页面:

垃圾优先(G1(收集器是一种服务器式垃圾收集器,针对具有大内存的多处理器机器。

此外,它的内存开销更高,这对资源受限的移动设备来说是个问题:

如果您从。。。CMS收集器到G1,您可能会看到更大的JVM进程大小。这在很大程度上与";会计;数据结构,如记忆集和集合集。

最新更新