首页 > 系统相关 >HarmonyOS Next:内存管理与 GC 基础

HarmonyOS Next:内存管理与 GC 基础

时间:2024-10-29 10:08:49浏览次数:5  
标签:对象 回收 Next HarmonyOS GC 内存

本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的技术细节,基于实际开发实践进行总结。
主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。
本文为原创内容,任何形式的转载必须注明出处及原作者。

引言

HarmonyOS Next 作为华为自研的操作系统,其轻量级、跨平台的特点备受关注。其中,内存管理与垃圾回收(GC)机制作为保证系统性能的关键技术,对开发者来说至关重要。本文将带领大家初探 HarmonyOS Next 的内存管理机制,并深入理解其垃圾回收算法,帮助开发者更好地掌握内存管理技巧,提升应用性能。

ArkTS 中的内存分配

HarmonyOS Next 使用方舟编程语言(ArkTS)进行开发,其内存分配机制与传统的 Java 和 C++ 等语言有所不同。ArkTS 的内存主要分为两种:

  • 栈(Stack):用于存储简单类型(如数字、字符串等)和函数调用的局部变量。栈空间由操作系统自动分配和释放,无需开发者进行管理。
  • 堆(Heap):用于存储引用类型(如对象、数组等)的内存空间。堆空间需要由 ArkTS 引擎进行管理,开发者需要通过垃圾回收机制来释放不再使用的内存。

垃圾回收(GC)概念

垃圾回收(Garbage Collection,简称 GC)是一种自动化的内存管理机制,用于回收程序中不再使用的内存空间。GC 的目的是避免内存泄漏,并提高内存利用率。
目前主流的 GC 算法主要分为两大类:

  • 引用计数(Reference Counting):通过为每个对象维护一个引用计数器来跟踪对象的引用数量。当引用计数为 0 时,表示该对象不再被任何变量引用,可以被回收。
  • 对象追踪(Object Tracing,又称 Tracing GC):通过遍历对象图,找到所有不可达的对象进行回收。对象图是由对象及其引用关系组成的结构,通过深度优先搜索等算法可以遍历整个对象图。
    ArkTS 运行时基于分代模型(年轻代/老年代)混合使用引用计数和对象追踪算法,并行并发化执行 GC 任务,从而实现不同场景下的高性能内存回收表现。

GC 触发机制

HarmonyOS Next 的 GC 机制主要分为三种:

  • 年轻代 GC(Young GC):主要回收年轻代空间,用于存放新创建的对象。触发条件包括:年轻代空间不足、超过预设阈值等。
  • 老年代 GC(Old GC):主要回收老年代空间,用于存放存活时间较长的对象。触发条件包括:老年代空间不足、超过预设阈值等。
  • 全量 GC(Full GC):对整个堆空间进行清理,回收所有不再使用的对象。触发条件包括:应用切换到后台、手动触发等。

来份栗子

以下示例代码展示了如何在 ArkTS 中创建对象,并触发垃圾回收:

// 创建对象
let obj = { name: "张三", age: 30 };
// 添加对象到数组
let array = [obj, obj];
// 删除对象
array.splice(0, 1);
// 手动触发垃圾回收
ArkTools.hintGC();

在上述代码中,我们创建了一个对象并将其添加到数组中。然后,我们删除数组中的第一个元素,此时对象 obj 的引用计数变为 0,因此可以被视为垃圾对象。最后,我们调用 ArkTools.hintGC() 方法手动触发垃圾回收,回收不再使用的对象。

GC 日志分析

HarmonyOS Next 提供了丰富的 GC 日志信息,可以帮助开发者分析 GC 行为和性能。以下是一些常见的 GC 日志关键字:

  • [HPP YoungGC]:表示年轻代 GC,主要回收年轻代空间。
  • [HPP OldGC]:表示老年代 GC,主要回收老年代空间。
  • [CompressGC]:表示全量 GC,对整个堆空间进行清理。
  • IsInBackground:表示应用是否在后台运行。
  • SensitiveStatus:表示是否处于性能敏感场景。
  • OnStartupEvent:表示是否处于应用冷启动场景。
    通过分析 GC 日志,开发者可以了解 GC 触发的原因、耗时、内存占用等信息,从而优化内存管理策略,提升应用性能。

总结

HarmonyOS Next 的内存管理与垃圾回收机制是保证系统性能的关键技术。通过了解 ArkTS 的内存分配机制、GC 算法以及触发条件,开发者可以更好地掌握内存管理技巧,提升应用性能。同时,通过分析 GC 日志,我们可以更深入地了解 GC 行为,并进行针对性的优化。

标签:对象,回收,Next,HarmonyOS,GC,内存
From: https://www.cnblogs.com/samex/p/18512303

相关文章

  • goframe gconv.structs示例代码
    以下是一些使用 gconv.structs  的示例代码,展示了如何在GoFrame框架中进行结构体转换:示例1:基本使用packagemainimport(  "fmt"  "github.com/gogf/gf/frame/g"  "github.com/gogf/gf/util/gconv")typeUserstruct{  Uid   int  ......
  • Leetcode 3336. Find the Number of Subsequences With Equal GCD
    Leetcode3336.FindtheNumberofSubsequencesWithEqualGCD1.解题思路2.代码实现题目链接:3336.FindtheNumberofSubsequencesWithEqualGCD1.解题思路这一题没能自力搞定,挺伤心的,看大佬的代码之后发现思路上是一个非常暴力的动态规划,就是不断地考察每一......
  • MaskGCT,AI语音克隆大模型本地部署(Windows11),基于Python3.11,TTS,文字转语音
    前几天,又一款非自回归的文字转语音的AI模型:MaskGCT,开放了源码,和同样非自回归的F5-TTS模型一样,MaskGCT模型也是基于10万小时数据集Emilia训练而来的,精通中英日韩法德6种语言的跨语种合成。数据集Emilia是全球最大且最为多样的高质量多语种语音数据集之一。本次分享一下如何在本地......
  • springcloud分布式微服务 java高速公路收费管理系统
    目录课题介绍具体实现截图开发核心技术:开发工具开发技术SpringCloudEureka详细视频演示核心代码部分展示系统设计需求分析可行性论证源码获取课题介绍根据高速公路收费管理系统的系统分析结果,整个系统包括以下各个单元:管理员,用户,收费站,交通流量,车道信息,通知通知公......
  • 微服务分布式springcloud高校竞赛活动报名管理系统
    目录课题介绍具体实现截图开发核心技术:开发工具开发技术SpringCloudEureka详细视频演示核心代码部分展示系统设计需求分析可行性论证源码获取课题介绍与高校竞赛活动报名管理系统管理者及学生交流后经过详细缜密的思考,再讨论研究后得出的初步系统开发所需实现功能......
  • 【玩转金融素材生成】探索交互式AIGC组合素材生成技术
    作者:京东科技蒋煜襄  本文介绍了一种交互式可控组合素材生成技术,本方案基于StableDiffusion模型,结合位置控制生成技术,实现了金融领域中的多元素素材组合交互式生成能力,增加了素材生成的丰富性以及使用上的易用性,可以帮助设计师和运营人员快速制作banner图或活动页中所需要......
  • 在 HarmonyOS Next 中使用 Core File Kit 管理应用文件
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的文件管理技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在应用开发中,文件的创建、读......
  • 鸿蒙NEXT开发-应用数据持久化之用户首选项(基于最新api12稳定版)
    注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下如果大家觉得博主文章写的好的话,可以点下关注,博主会一直更新鸿蒙next相关知识专栏地址:https://blog.csdn.net/qq_56760790/category_12794123.html目录1.应用数据持久化2.应用数据持久......
  • KVM虚拟机下利用宝塔面板中的 Docker 配置 Nextcloud + onlyoffice
    第一部分:安装配置nextcloud准备(1)启动一个KVM虚拟机,见下图。该虚拟机为anlisos8…0.2虚拟机的ssh、hostname、IP地址都已配置好。(2)宝塔面板也已安装好docker一、环境docker版本:29.0.4DockerCompose版本:2.27.0mariadb-docker版本:10.6.17......
  • 【AI探索实践】使用Docker部署ChatGPT Next Web个人智能助手
    【AI探索实践】使用Docker部署ChatGPTNextWeb个人智能助手一、ChatGPTNextWeb介绍1.1ChatGPTNextWeb简介1.2主要特点1.3主要使用场景二、本次实践规划2.1本地环境规划2.2本次实践介绍三、本地环境检查3.1检查Docker服务状态3.2检查Docker版本3.3检查doc......