ART虚拟机GC系统优化的研究.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ART虚拟机GC系统优化的研究

ART虚拟机GC系统优化的研究   摘 要   Android系统中虚拟机通过提供垃圾回收机制(Garbage Collection,GC)实现自动内存管理,但是这一机制在简化应用开发人员内存管理负担、避免内存泄漏问题的同时也给系统带来了内存驻留、响应延迟、并发阻碍等负面影响。Android 5.0以后,Google用ART虚拟机替换掉Dalvik虚拟机,为了更好地利用ART虚拟机自动内存管理的特性,应用开发人员有必要深入理解ART虚拟机垃圾回收机制的实现。本文从GC算法和堆分配过程研究了ART虚拟机GC系统,本文提出的动态设置堆利用率以减少Full GC的方式优化GC系统性能,最后测试多组应用程序对比优化前后在GC次数、暂停时间和GC总时间等方面的差异。整体平均暂停时间相较于优化前降低20%以上,而平均GC总次数减少5次以上,证明本文实验条件下动态设置堆利用率的方式优化Full GC对GC系统性能的提高是有效的。   【关键词】ART虚拟机 GC系统 堆利用率   ART虚拟机GC子系统对Android系统和上层应用程序的稳定性和流畅性具有非常大的影响。本文提出的动态设置堆利用率以减少Full GC的方式优化GC系统性能,最后测试多组应用程序对比优化前后在GC次数、暂停时间和GC总时间等方面的差异。   1 垃圾回收机制   1.1 堆内存的对象分配和释放   ART虚拟机实现的垃圾回收机制是一种自动内存管理机制,对象分配和收集都在堆上进行。传统的C/C++是没有GC的,初始化对象然后分配内存空间需要手动地malloc/new,当需要销毁对象时候需要手动地free/delete。内存管理使用这种模式导致至少两个明显的问题:指针悬挂和内存泄漏。而采用了垃圾回收机制的JAVA中,软件开发人员只需考虑申请内存,垃圾回收机制可以根据一定的规则判断出内存空间中的“垃圾”,自动释放“垃圾”占用的内存。不过付出的代价是GC耗费额外的系统资源,并会暂停用户进程,严重时候明显影响用户体验,例如系统卡顿、动画掉帧等。与此同时潜在一个危机是,一旦出现内存泄漏或溢出的问题,如果开发人员不了解虚拟机内存管理机制,那么解决这类问题就变得棘手。   1.2 ART虚拟机的GC算法   Java垃圾回收机制采用的主流GC算法包括:引用计数算法(Reference counting)、标记-清除算法(Mark-Sweep GC)、复制算法(Copying GC)、标记-合并算法(Mark-Compact GC),后面三种算法属于追踪式算法,如表1所示。   ART虚拟机默认的两种垃圾回收技术,一种是Mark-Sweep,另一种是Semi-Space GC。应用在前台时候设置GC采用Mark-Sweep算法,应用运行在后台时候设置GC采用Semi-Space算法。本文主要关注运行在前台的Mark-Sweep算法的执行性能。   Mark-Sweep:它的大致思想是,将所有的对象在内存中的位置记录在位图A中。然后,从所有对象的根出发,扫描根对象的所有引用,扫描根对象的所有引用的引用,一层层逐级扫描,直到叶子节点的对象。在这个逐级扫描的过程中,将涉及到的对象的位置都记录在位图B中。扫描结束后,对比两张位图A和B:所有A中置位的位置,却没有B中被置位,被视为垃圾。并根据位图中的索引检索得到对象,然后释放该对象占用的内存。   Semi-Space GC: 它的特点是需要有两个space空间,其中一个备用。另一个被系统拿来分配对象。在做垃圾扫描的时候,将所有在空间A中被有效引用的对象移动到空间B中。那么在空间A中剩余的对象就是垃圾了,直接释放垃圾对象所在的整个空间就可以了。这个回收速度很快。   1.3 ART虚拟机的堆结构   堆(Heap)可以是由字构成的连续数组,也可以组织成不连续、由字构成的块的集合,与数据结构中堆的概念不同,内存管理中的堆用来存放各种用户或系统申请的数据对象,在内存中占据非常大的空间,因此也常将堆空间用内存来代替。   如图1所示,ART虚拟机中Mark-Sweep GC堆结构分6个区域,分别为Image Space、Zygote Space、Non-Moving Space、Large Object Space、Main Space以及Backup Space。Image Space存放预加载的系统类对象,Zygote Space在Zygote进程和应用程序进程之间共享,存放Zygote进程所需的预加载的类、资源和对象,它是Zygote进程在fork第一个应用程序时候从Non-Moving Space划分出来的。Non-Moving Space是用来存放不需要移动的对象的,有些对象例如类对象、类方法和类成员变

文档评论(0)

317960162 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档