DEV Community

SameX
SameX

Posted on

HarmonyOS Next:内存管理与 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();
Enter fullscreen mode Exit fullscreen mode

在上述代码中,我们创建了一个对象并将其添加到数组中。然后,我们删除数组中的第一个元素,此时对象 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 行为,并进行针对性的优化。

Heroku

Simplify your DevOps and maximize your time.

Since 2007, Heroku has been the go-to platform for developers as it monitors uptime, performance, and infrastructure concerns, allowing you to focus on writing code.

Learn More

Top comments (0)

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay