欢迎来到第壹文秘! | 帮助中心 分享价值,成长自我!
第壹文秘
全部分类
  • 幼儿/小学教育>
  • 中学教育>
  • 高等教育>
  • 研究生考试>
  • 外语学习>
  • 资格/认证考试>
  • 论文>
  • IT计算机>
  • 法律/法学>
  • 建筑/环境>
  • 通信/电子>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 第壹文秘 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    ART运行时CompactingGC为新创建对象分配内存的过程分析.docx

    • 资源ID:1205208       资源大小:139.49KB        全文页数:31页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,如果您不填写信息,系统将为您自动创建临时账号,适用于临时下载。
    如果您填写信息,用户名和密码都是您填写的【邮箱或者手机号】(系统自动生成),方便查询和重复下载。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    ART运行时CompactingGC为新创建对象分配内存的过程分析.docx

    ART运行时COinPaCtingGC为新创立对象分配内存的过程分析在引进CompactingGC后,ART运行时优化了堆内存分配过程.最显著特点是为每个RT运行时线程增加局局部配缓冲区<Thead1.oca1.A1.1.ocationBuffer)和在OOM前进行一次同构空间压缩(HomogeneousSpaceCompact).前者可提高堆内存分配效率,后者可解决内存碎片问璃。本文就对ART运行时引进<npac1.ingGC后的堆内存分配过程进行分析。从接口层面上看,除了提供常规的对©分配接口AIIOCobjeCt,AKT运行时的堆还提供了一个专门用于分配非移动对象的接口A11OcNonMovab1ebject,如图1所示:A1.cO>jStMocNonMftXieCqKtM1.occ(I)MIMtXMIocteor明1ART运行时堆提供的对象分配接口非移动对象指的是保存在前面一倘文章提到的Non-MovingSpace的对象,主要包括那些在类加栽过程中创立的类对象(C1.ass),类方法对象(Ar1.Ne1.hOd)和类成员变量对象(Ar1.Fie1.d等,以及那些在经历过若干次Generationa1.Semi-SpaceGC之后仍然存活的对象.前者是通过A1.IocNonMovab1.eObject接口分配的,而后者是在执行GeneratiOna1.Semi-SpaceCC过程移动过去的.本文主要关注通过AI1.oCNOnMOVab1.eobjeet接口分配的非移动对象,无论是通过AI1.OCObjeCt接口分配对收,还是通过AI1.oeNOnMOVabIeObjeCt接口分配对象.蜃后都统一时用了另外一个接口AnOCObjeCeithA1.IOCatorj5行具体的分配过程,如下所示:cppviewp1.aincopy在CoDE上杳看代玛片派生到我的代码片c1.assHeap(pub1.ic:/A1.1.ocatesandinitia1.izesstorageforanobjectinstance.temp1.ate<IxioIk1.nstruaented,typennmeEreFenceVisitor>mirror:Object*A1.IocObject(Thread*se1.f,mirror:C1.ass*k1.ass,sizenu111.bytes,constPreFenceVisitorftPrjrenCe_ViSi1.Or)SI1.ARED_1.OCKS_REQUIRED(1.oCks:BUtatorOCkj(returnA1.IocObjectBithA1.1.ocator<k1.nstrumented,true>(se1.f,k1.ass,num_bytes,GetcurrentA1.IocatorO,PrCjenCe_viSitor):temp1.ate<boo1.k1.nstru三ented,typenamePreFenceVisitor>mirror:Object*1.IocNonMovab1.cObject(Threadse1.f,mirror:zC1.assk1.ass9sizetnumbytes,constPreFenceVisitorApre_fence_visitor)SHARED1.oCKS_REQUIRED(1.oCkS:BUIaI。J1.OCk_)(return1.IocObjectUithj1.1.ocator<k1.nstrumented.true>(se1.f.k1.ass.num_bytes.GetCurrentNonMoving11.ocatorO,pre_fencevisitor);)temp1.ate<1.)o1.kInstruaentedfboo1.kCheck1.arge()bject,type11fimePreFenceVisitor>A1.WRYS,N1.1NEmirror:ObjeC1.*A1.IocObjectWithA1.1.ocator(Thread*se1.f>BirrornC1.ass*k1.ass1size_tbyte_coun1.»A1.1.ocatorTypea1.1.ocator,constPreFenceVisitorftpre_fence_visitor)SHARED1.()CKS_REQUIREI)(1.ocks:mitator_IockJ;A1.1.ocatorTypcGetCurrentA1.IocatorOconst(returncurrent-a1.1.ocator-;)A1.1.ocatorTypcGetCurreniNonMovirgA11.ocatorOconstreturncurrent_non_moving_a1.1.ocator_;private:/1.1.ocatortype.A1.IocatorTypecurrent_a1.1.ocator_;constA1.1.ocatorTypecurrent_non_moving_a1.1.ocator);这五个函数定义在文件art/runtime/gc/heap.h6:Heap类的成员函数AI1.OCobjeCt4JA1.IocNonMovab1.eObject中.参数Se1.f描述的是当前线程.k1.ass描述的是要分泥的对软所M的类型,参数num.bytes描述的是要分北的对弦的大小.最后一个参数pre_fence_visitor是一个回调函数,用来在分配时象完成后在当前执行路径中执行初始化操作,例如分配完成一个数组对象,通过该回调函数立即设置数组的大小,这样就可以保证数组对象的完整性和一致性,防止多线程环境下通过加馈来完成相同的操作。Heap类的成反函数A1.1.ocObjectWithA1.1.ocator需要另外,个额外的类型为AIIOCatOrTyPe的卷数来描述分配涔的类里,也就是描述要在物个空间分配对象CA1.1.oMIorTyW是一个枚举类型,它的定义如卜所示,cppviewp1.aincopy在CoDE上查看代码片派生到我的代码片/Differenttypesofa1.1.ocators.enim1.IocatorTypek1.IocatorTypeBuffpPointer,/UseBvmpPointera1.1.ocator,hasentrypoints.kA1.IocatorTypeT1.AB1./UseT1.ABa1.1.ocator,hasentrypoints.kj1.IocatorTypeRosA1.1.oc,/UseRos1.Ioca1.1.ocator,hasentrypoints.k1.IocatorTypeD1.Ha1.1.oc,/Used1.ma1.1.ex:a1.1.ocator,hasentrypoints.kA1.IocatorTypeXMip.i11g,/Specia1.a1.1.ocatorfornon11>.ingobjects,doesn'thaveentrypoints.kA1.IocatorType1.XIS,/1.argeobjectspace,a1.sodoesn,thaveen1.rypints.):这个枚举类型定义在文件/artrunti三<gc1.1.ocatortype,hA1.1.ocatorType一共有六个伯,它In的含义如下所示:kA1.IocatorTypcBuinpPointer:表示在BUITPPointerSPHCR中分配对象.kA1.IocatorTypeT1.AB:我示要在由RUmPPointerSPaCe提供的畿程同同部配缓冲区中分配时象。k1.IocatorTypeRosA1.1.oc:表示要在RoS.M1.ocSPHCo分配对kA1.IocatorTypeD1.Ma1.1.oc:表示要在D1.Ma1.1.ocSPaCe分配对象。kA1.IocatorTypeNonMoving:表示要在卜OnMovingSPHCe分配对象.kA1.IocaiorTypc1.OS:表示要在1.argCObjectSPaCC分配时象。Heap类的成员函数A1.1.ocObject和A1.IocNonMovab1.eObject使用的分配器类型分别是由成员变量currenta1.1.ocatorcurrentnonmoving_a1.1.ocator决定的前者的(ft与当前使用的GC类型有关当GC类型发生变化时,就会调用HeaP类的成员函数ChangeCoueCIor来修改当前使用的GC,【可时也会调用月外一个成员函数ChangoA1.1.ocator来修改Heap类的成员变用current_aI1.ocator的值。由于ART运行时只有一个NonMovingSpace.因此后存的Gi就固定为kA1.IociitorTypoMonMoving.Heap类的成员函数ChangeCoIIeeIor的实现如下所示:cppviewp1.aincopy在CODE上查看代码片派生到我的代码片voidHeap:ChangeCo1.Iector(Co1.IectorTypeco1.1.ectortype)'./TODO:On1.ydothiswitha1.1.三utatorssuspendedtoavoidraces.if(co1.Icc1.oj1.ypc!=co1.1.ector_type_)co1.1.ector_type_=co1.1.ector_type;gc_p1.an_.c1.ear();switch(co1.1.ccior_1.ype_)(casekCo1.IectorTypeCC:/Fa1.1-through.casekCo11ectorTypeMC:/Fa1.!-through.casekCoI1.ectorTypeSS:/Fa1.1.-through.MSekCo1.IoctorTypeGSS:gc_p1.an_.push_back(co1.1.ector:ZkGcTypeFu1.1.);if(use-t1.ab_)ChangeA1.1.ocator(kA1IocatorTypeT1.AB):e1.seChangeAI1.ocator(kAIIocatorTypeBumpPointer):Ibreak;casekCo11ectorTypeHS:(gc_p1.an_.ush_back(co1.1.ector:kGcTypcSticky);gc_p1.an_.pushback(co1.1.ector:ZkGcTypePartia1.);gc_p1.an_.PUSh_back(co1.1.ector:ZkGcTypeFu1.1.):ChangeA1.1.ocator(kVseRosA1.Ioc?kA1.IocatorTypeRosA1.Ioc:kA1IocatorTypeD1.Ma11.oc);break;casekCo11ectorTypoCS:gc_p1.an_.push_back(co1.1.ector:ZkGcTypeSticky);gc_p1.an_.push.back(co1.1.ector:RGcTypePariia1.):gc_p1.an_.push_back(co1.1.ector:ZkGcTypeFu1.1.);ChangeA1.1.ocator(k1.seRos1

    注意事项

    本文(ART运行时CompactingGC为新创建对象分配内存的过程分析.docx)为本站会员(p**)主动上传,第壹文秘仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知第壹文秘(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 1wenmi网站版权所有

    经营许可证编号:宁ICP备2022001189号-1

    本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。第壹文秘仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第壹文秘网,我们立即给予删除!

    收起
    展开