UI组件内存：ComMemory分析
==================

#### 功能介绍

从DevEco Studio 6.1.1 Beta1版本开始，DevEco Profiler新增ComMemory模板，可以分析UI界面各组件内存的分配情况，帮助定位UI组件内存泄漏问题。

ComMemory模板支持的泳道包括：Memory、ArkUI Snapshot、ArkTS Snapshot、All Heap & Anonymous VM、All Heap、All Anonymous VM、System Resources、Graphic Memory。本文介绍ArkUI Snapshot泳道，其他泳道的详细信息请参考对应模板内容。

*   Memory、All Heap & Anonymous VM、All Heap、All Anonymous VM、System Resources、Graphic Memory泳道的介绍请参考[基础内存：Allocation分析](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-insight-session-allocations)。
*   ArkTS Snapshot泳道的介绍请参考[内存泄漏：Snapshot分析](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-insight-session-snapshot)。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/c2/v3/fU5tFfKwTQu-14fzJ87MIA/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260709T132923Z&HW-CC-Expire=86400&HW-CC-Sign=377EAB0C50ACC5D35FD8025FD85540BBD176B68C61B9387D0AB66216AD592B85)

任务分析前，需创建ComMemory分析任务并录制相关数据，操作方法可参考[性能问题定位：深度录制](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/deep-recording)，或在[会话区](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-profiler-session)选择**Open File**，导入历史数据。

#### 查看组件树和组件信息

1.  开始录制后观察**Memory**泳道的内存使用情况，在需要定位的时刻单击任务左上角的![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/c1/v3/0Deh7IuVQeWjIc0USF1LNQ/zh-cn_image_0000002625073887.png?HW-CC-KV=V1&HW-CC-Date=20260709T132923Z&HW-CC-Expire=86400&HW-CC-Sign=09B55C84169E91E487886A0DB4F651E82855E252871EC56F88D4A16676251376 "点击放大")启动一次快照，一次快照完成后会在**ArkUI Snapshot**泳道出现紫色区块。
    
    **Details**区域显示当前快照的详细信息，点击**Open**，将在[ArkUI Inspector](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-arkui-inspector)中打开相应的.arkli文件。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/35/v3/00PEuJ5OR1aocJ7qmr90Pw/zh-cn_image_0000002594474374.png?HW-CC-KV=V1&HW-CC-Date=20260709T132923Z&HW-CC-Expire=86400&HW-CC-Sign=7C03E238F17AFD1DAAD1F5EC8ADFA8881518D0BAEAB037AEA5A70F2BA6388BDC "点击放大")
    
2.  在ArkUI Inspector中查看组件树。26.0.0 Beta1版本新增Show Free-Node Components。
    
    默认勾选**Show Component Size**和**Show Free-Node Components**，Show Component Size显示各组件的内存占用情况，Show Free-Node Components显示游离组件（未在组件树上的组件）。点击![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/65/v3/SQwf85DvRG-7Mq74wOTUQA/zh-cn_image_0000002625073859.png?HW-CC-KV=V1&HW-CC-Date=20260709T132923Z&HW-CC-Expire=86400&HW-CC-Sign=77D097FAE492943A634F930DC1598462D8ABB15CC6DE22B36F9D359E671499EA "点击放大")，勾选**Show Recursive Size**，显示各组件为根的子树的内存占用情况。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/1a/v3/aU5n9h6IQ9yr7hz-My9qUw/zh-cn_image_0000002624993739.png?HW-CC-KV=V1&HW-CC-Date=20260709T132923Z&HW-CC-Expire=86400&HW-CC-Sign=51C72E41FE9831950B9A7C35D52CAD77BABCC0FE0E0A5727FDD4FEBE2C72BB11)
    
3.  在ArkUI Inspector中查看组件的信息。
    
    *   在ArkUI Inspector的**Memory** >**Statistics**中，查看组件的内存统计信息。
        
        *   Current：当前组件ArkTS内存和Native内存的占用情况。
        *   ArkTS：当前组件对应的ArkTS堆快照对象的[Retained Size](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-snapshot-basic-operations#li1323381634912)。
        *   Native：当前组件新增占用的Native内存。
        *   Subtree：当前组件及其子组件的Current内存之和。
        *   nativeCount：当前组件存活的Native分配内存个数。
        *   arktsCount：当前组件的ArkTS堆快照对象个数。
        *   recursive：递归统计信息。
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/7d/v3/7kJLTOLgRPecTCjlqKLCdw/zh-cn_image_0000002594634286.png?HW-CC-KV=V1&HW-CC-Date=20260709T132923Z&HW-CC-Expire=86400&HW-CC-Sign=925BE01A14F8A820A70895DD92D1D62E01E782B70AA759B0FC5ECD2BE010AFBA "点击放大")
        
    *   在ArkUI Inspector的**Memory** > **Details**中，点击Details中任一项后，打开DevEco Profiler查看显示组件的详情。
        
        *   ShowAllocationDetail：显示当前组件的Allocation详情。
        *   ShowSnapshotDetail：显示当前组件的Snapshot详情，系统组件不显示该项。
        *   ShowRecursiveAllocationDetail：显示当前组件及其子组件的Allocation详情。
        *   ShowRecursiveSnapshotDetail：显示当前组件及其子组件的Snapshot详情。
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/de/v3/BTCM5sXGQV-bWAfI7LwK2w/zh-cn_image_0000002625073875.png?HW-CC-KV=V1&HW-CC-Date=20260709T132923Z&HW-CC-Expire=86400&HW-CC-Sign=3CEF0456B5F3B64220BCFEF66DB1D3E229D8C9D2044ABD2F1B6C814AE6EEC819 "点击放大")
        
    *   在ArkUI Inspector的**Memory** > **State****s**中，查看UI组件的状态变量内存。
        
        memory字段表示该状态变量在对应组件的ArkTS堆快照中的Retained Size，更多请参考[查看UI组件的状态变量](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-arkui-inspector#section19923158103412)。
        
        ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/05/v3/SkFX-FDYQY-1ntmE2vkFMQ/zh-cn_image_0000002594634298.png?HW-CC-KV=V1&HW-CC-Date=20260709T132923Z&HW-CC-Expire=86400&HW-CC-Sign=5B7DBF5B2ED081F5EB6B0BD9E898EDE6B90DC7C885FB3632D39C7C3433D924DF)
        
    
4.  在中间栏点击![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/d6/v3/1xv6hYSbT3aLpwC-LTku5w/zh-cn_image_0000002625073867.png?HW-CC-KV=V1&HW-CC-Date=20260709T132923Z&HW-CC-Expire=86400&HW-CC-Sign=819549E2423C4EEEA941A39E343DD1CA184B909D3C78EA2F68CEA582DD55D3BB)可以将包含内存信息的组件树快照导出到本地。

#### .arkli文件对比

从26.0.0 Beta1版本开始，支持对比.arkli文件，通过对比快速定位异常增多的组件。

1.  开始录制后观察**Memory**泳道的内存使用情况，在需要定位的时刻单击任务左上角的![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/7b/v3/ly_EFZgbQlCVGM4n_USOXQ/zh-cn_image_0000002594474382.png?HW-CC-KV=V1&HW-CC-Date=20260709T132923Z&HW-CC-Expire=86400&HW-CC-Sign=8E05D3D96DEF706BAD74970BBB3E893F8DCAB999DF72F1E5DF599AB5BC0DEC9D "点击放大")启动一次快照，一次快照完成后会在**ArkUI Snapshot**泳道出现紫色区块。
    
    **Details**区域显示当前快照的详细信息，点击**Open**，将在[ArkUI Inspector](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-arkui-inspector)中打开相应的.arkli文件。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/8f/v3/pgYobQZ7QnmyD1w0jK98jQ/zh-cn_image_0000002625073857.png?HW-CC-KV=V1&HW-CC-Date=20260709T132923Z&HW-CC-Expire=86400&HW-CC-Sign=1FAD702B0B16B3C7C4A46ED4816DAD45A01012C1DBAE10C5C451AE80004131B7 "点击放大")
    
2.  当前打开的.arkli文件作为base文件，在Component Tree下拉框选择的.arkli文件作为Target文件，查看两个.arkli文件的比较结果，从比较结果可查看：新增组件（绿色，如Column）、删除组件（红色，如NavBar）、游离组件（灰色，如JsView），及其子组件新增（绿色，如+1576）和删除个数（红色，如-8）。点击异常增多的组件，在右侧属性面板展示组件所在代码文件，点击可跳转至具体代码。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/de/v3/AWqWthMXSouvR37wm4T7Lg/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260709T132923Z&HW-CC-Expire=86400&HW-CC-Sign=4EC028ECDD0EE5395FCFB0C399969AED33CBB0214A21B87E52CD92E9018C312F)
    
    Target文件需要先点击**Open**按钮在ArkUI Inspector中打开，否则在下拉框中选不到。
    
    ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/5/v3/8IqqyJz0SaKFzPtBH8ejfQ/zh-cn_image_0000002625073881.png?HW-CC-KV=V1&HW-CC-Date=20260709T132923Z&HW-CC-Expire=86400&HW-CC-Sign=45D3257AF63B5F73F8D9C1A439FBAFAFD6703AE6C8A0F6751D8CC27EFBD6245F)