首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Android不使用G1垃圾收集器

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

Stack Overflow用户
提问于 2022-01-11 03:21:11
回答 2查看 128关注 0票数 1

连接到https://developer.android.com/topic/performance/memory-overview#gc,安卓目前的gc似乎是CMS。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-11 03:35:26

你的问题是基于以下几个错误的前提:

  1. 安卓不使用OpenJDK CMS收集器。它有自己的垃圾收集器。
  2. 链接到的页面没有提到OpenJDK或CMS:
代码语言:javascript
复制
- It does say that the Android GC is generational, but many, many collectors are generational.
- It does NOT say that the Android collector is _concurrent_, which is one of the important characteristics of CMS and G1.
  1. 安卓并不是基于OpenJDK代码库的。因此,如果没有(可能)完全重写,OpenJDK垃圾收集器将无法在Android中工作。
  2. OpenJDK由带有类路径扩展的GPLv2覆盖,因此从技术上讲,源代码可以移植。然而,版权仍归甲骨文所有。我无法想象谷歌想要将任何甲骨文版权代码合并到Android代码库中。(尤其是考虑到甲骨文利用诉讼获得竞争优势的令人不快的历史。)
  3. Android和OpenJDK的平台需求有很大的不同。例如,OpenJDK是为运行服务而不是应用程序而优化的。使G1在典型的企业服务器上具有吸引力的特性并不一定与运行在某人移动电话上的“应用程序”相匹配,因为在移动电话上(例如)内存较少,内核较少,而功耗/电池寿命则是关键问题。

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

票数 1
EN

Stack Overflow用户

发布于 2022-01-11 03:27:21

G1垃圾收集器是Oracle的一个特性,但Android不使用Oracle。此外,从设计角度来看,G1 GC不适合移动设备,这很可能是导致类似算法没有在安卓或Dalvik运行时实现的一个因素。来自此页

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

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

如果你从.CMS收集器到G1,您可能会看到一个更大的JVM进程大小。这在很大程度上与“会计”数据结构有关,如记忆集和集合集。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70661245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档