为什么 Android VM 不使用 G1 垃圾收集器
Why Android VM not use G1 Garbage Collector
链接到 https://developer.android.com/topic/performance/memory-overview#gc,android 当前 gc 似乎是 CMS。
有了 g1 的好处,为什么 android 不用 g1?
G1 垃圾收集器是 Oracle JVM 的一个特性,但 Android 不使用 Oracle JVM。此外,从设计的角度来看,G1 GC 不适合移动设备,这可能是 Android 或 Dalvik 运行时未实现类似算法的一个因素。来自 this page:
The Garbage-First (G1) collector is a server-style garbage collector, targeted for multi-processor machines with large memories.
此外,它的内存开销较高,这对于资源受限的移动设备来说是个问题:
If you migrate from the ... CMS collector to G1, you will likely see a larger JVM process size. This is largely related to "accounting" data structures such as Remembered Sets and Collection Sets.
你的问题是基于一些错误的前提:
Android 不使用 OpenJDK CMS 收集器。它有自己的垃圾收集器。
您链接到的 page 没有提到 OpenJDK 或 CMS:
- 确实说 Android GC 是分代的,但是很多很多收集器都是分代的。
- 并不是说Android收集器是并发,这是CMS和G1的重要特性之一。
Android 不基于 OpenJDK 代码库。因此,如果不(可能)完全重写,OpenJDK 垃圾收集器将无法在 Android 中工作。
OpenJDK 包含在具有类路径扩展的 GPLv2 中,因此源代码在技术上可以移植。但是,版权仍属于 Oracle。我无法想象 Google 想要将任何 Oracle 版权代码合并到 Android 代码库中。 (特别是考虑到甲骨文利用诉讼获得竞争优势的不愉快历史。)
Android 和 OpenJDK 的平台要求明显不同。例如,OpenJDK 针对 运行 服务而非应用程序进行了优化。使 G1 在典型企业服务器上具有吸引力的特征不一定能很好地匹配某人移动设备 phone 上的“应用程序”运行,其中(例如)RAM 和内核较少,并且功耗/电池寿命是关键问题。
总之,Android支持G1收集器意义不大。而且它不太可能永远发生。
链接到 https://developer.android.com/topic/performance/memory-overview#gc,android 当前 gc 似乎是 CMS。
有了 g1 的好处,为什么 android 不用 g1?
G1 垃圾收集器是 Oracle JVM 的一个特性,但 Android 不使用 Oracle JVM。此外,从设计的角度来看,G1 GC 不适合移动设备,这可能是 Android 或 Dalvik 运行时未实现类似算法的一个因素。来自 this page:
The Garbage-First (G1) collector is a server-style garbage collector, targeted for multi-processor machines with large memories.
此外,它的内存开销较高,这对于资源受限的移动设备来说是个问题:
If you migrate from the ... CMS collector to G1, you will likely see a larger JVM process size. This is largely related to "accounting" data structures such as Remembered Sets and Collection Sets.
你的问题是基于一些错误的前提:
Android 不使用 OpenJDK CMS 收集器。它有自己的垃圾收集器。
您链接到的 page 没有提到 OpenJDK 或 CMS:
- 确实说 Android GC 是分代的,但是很多很多收集器都是分代的。
- 并不是说Android收集器是并发,这是CMS和G1的重要特性之一。
Android 不基于 OpenJDK 代码库。因此,如果不(可能)完全重写,OpenJDK 垃圾收集器将无法在 Android 中工作。
OpenJDK 包含在具有类路径扩展的 GPLv2 中,因此源代码在技术上可以移植。但是,版权仍属于 Oracle。我无法想象 Google 想要将任何 Oracle 版权代码合并到 Android 代码库中。 (特别是考虑到甲骨文利用诉讼获得竞争优势的不愉快历史。)
Android 和 OpenJDK 的平台要求明显不同。例如,OpenJDK 针对 运行 服务而非应用程序进行了优化。使 G1 在典型企业服务器上具有吸引力的特征不一定能很好地匹配某人移动设备 phone 上的“应用程序”运行,其中(例如)RAM 和内核较少,并且功耗/电池寿命是关键问题。
总之,Android支持G1收集器意义不大。而且它不太可能永远发生。