Skip to content

MoonlitDropOfBlood/LeakCanary

Repository files navigation

LeakCanary Library for OpenHarmony

简介

openHarmony

LeakCanary是一个为OpenHarmony开发的内存泄漏检测库,提供自动化的内存泄漏监控和检测功能。

  • 支持自动检测组件内存泄漏
  • 基于WeakMapFinalizationRegistry实现高效的内存监控
  • 基于Navigation的页面,实时监控页面及其子组件的内存状态
  • 内存泄漏发送时会在Log中打印一条Tag为GC的error level log

下载安装

ohpm install @duke/leak-canary

OpenHarmony ohpm 环境配置等更多内容,请参考如何安装 OpenHarmony ohpm 包

使用说明

基本用法

导入LeakCanary库:

import { LeakCanary } from '@duke/leak-canary';

核心API

初始化监控

初始化LeakCanary并传入根组件:

LeakCanary.registerRootWatch(rootComponent);

手动注册组件

手动注册需要监控的组件:

LeakCanary.registerAllChild(component);

LeakCanary

方法名 入参 接口描述
registerRootWatch rootComponent: object 注册Navigation根组件进行内存泄漏监控
registerAllChild component: object 手动注册需要监控的组件及其所有子组件进行内存泄漏检测

工作原理

LeakCanary通过以下方式实现内存泄漏检测:

  1. 利用 WeakMapWeakRef 弱引用机制避免干扰正常GC
  2. 通过 FinalizationRegistry 监听对象被GC的时机
  3. 集成OpenHarmony的UI观察者系统,监听导航状态变化
  4. 在页面即将消失时自动注册该页面的所有子组件进行监控

约束与限制

  • 对于@Entry router 下的组件没有很好的自动监控方式,需要手动监控
  • 基于目前仅在页面销毁前进行组件注册的方式,对于动态组件可能会监控不到,如if 不满足条件后,但是实际泄漏,则无法被检测到,如有需要,建议手动监控
  • 该库不建议在生产环境使用,可能会增加卡顿或者ANR
  • 手动注册监听,需要在组件销毁前,不然可能会产生误报

在下述版本验证通过:

DevEco Studio: 6.0.0, SDK: HarmonyOS 6.0.0.120 Release Ohos_sdk_public 6.0.0.47 (API Version 20 Release)

规划

  • 手动注册时不在需要考虑时机
  • 对于List下复用的组件兼容性测试及支持
  • 动态组件监听的实现方案
  • 对于Page的自动监听支持
  • 添加数据库,存储泄漏信息,提供查询功能
  • 添加内存泄漏检测报告页面,分近期和全部
  • 添加通知,及时告知泄漏消息

目录结构

|---- WebSocket
|     |---- AppScrope  # 示例代码文件夹
|     |---- entry  # 示例代码文件夹
|---- library 
|     |---- example # 示例代码文件夹  
|     |---- src 
|            |---- main 
|                    |---- ets 
|                           |---- LeakCanary.ts # 主入口文件 
|                           |---- ObjWatch.ts # 内存监控核心实现 
|     |---- index.ets # 对外接口 
|     |---- README.md # 安装使用方法  
|     |---- CHANGELOG.md  # 更新日志

贡献代码

使用过程中发现任何问题都可以提 Issue 给我,当然,我也非常欢迎你给我发 PR

开源协议

本项目基于 MIT license ,请自由地享受和参与开源。

其他库

About

实时检测 ArkTS 对象内存泄漏

Resources

License

Stars

Watchers

Forks

Packages

No packages published