DEV Community

SameX
SameX

Posted on

深入了解 ArkTS 的高性能垃圾回收(HPP GC)

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

引言

垃圾回收(GC)是现代编程语言中重要的内存管理机制,其效率直接影响着应用的性能。ArkTS 作为鸿蒙系统的开发语言,其运行时采用高性能部分垃圾回收(HPP GC)模型,通过混合算法和并行并发优化,实现了高效的内存回收,保证了应用的流畅运行。本文将深入分析 ArkTS 的 HPP GC 模型,帮助开发者更好地理解其原理和优化策略。

HPP GC 简介

HPP GC(High Performance Partial Garbage Collection)即高性能部分垃圾回收,它是一种将部分垃圾回收(Partial GC)与多种回收算法相结合的垃圾回收机制。HPP GC 主要包含以下特点:

  • 分代模型:将内存空间划分为年轻代和老年代,分别采用不同的回收算法。
  • 混合算法:结合引用计数和对象追踪算法,提高回收效率。
  • 并行并发化:并行执行 GC 任务,减少主线程挂起时间。 ### Young GC 和 Old GC 的差异 Young GC 和 Old GC 是 HPP GC 的两种主要 GC 类型,它们针对不同代的内存特性和应用场景进行优化:
  • Young GC:主要回收年轻代空间,用于存放新创建的对象。Young GC 主要使用 Copying 算法,将存活的对象复制到另一个半区,并回收旧的半区。Young GC 的触发条件包括:年轻代空间不足、达到预设的阈值等。Young GC 的特点是速度快,但回收的内存空间有限。
  • Old GC:主要回收老年代空间,用于存放存活时间较长的对象。Old GC 主要使用 Sweep 和 Compact 等算法,对老年代空间进行清理和压缩。Old GC 的触发条件包括:老年代空间不足、达到预设的阈值等。Old GC 的特点是回收内存空间多,但耗时较长。 HPP GC 通过动态调整年轻代和老年代的空间大小和回收阈值,平衡前台与后台的性能需求,保证应用的流畅运行。 ### 压缩 GC(CompressGC) 当应用切换至后台时,HPP GC 会触发压缩 GC(CompressGC)。压缩 GC 会同时对年轻代和老年代进行压缩,释放内存空间,优化应用切换至后台的性能。 ### 性能优化 HPP GC 通过以下策略减少 GC 暂停时间,提升应用响应速度:
  • 并发标记:在应用程序运行期间,并发地遍历对象图进行标记,减少主线程挂起时间。
  • 并行回收:使用多个线程并行执行垃圾回收任务,提高回收效率。
  • 阈值调整:根据应用程序的运行情况和内存占用情况,动态调整 GC 触发阈值,避免频繁 GC。
  • 空间预分配:在应用启动时预先分配一定的内存空间,避免运行时频繁的内存分配和回收。
  • 对象晋升策略:根据对象的存活时间,将对象从年轻代晋升到老年代,减少年轻代 GC 的频率。 ### 代码示例 以下示例代码展示了如何在 ArkTS 中触发 HPP GC:
// 触发 Young GC
ArkTools.hintGC();
// 触发 Old GC
ArkTools.hintOldSpaceGC();
// 触发压缩 GC
ArkTools.hintCompressGC();
Enter fullscreen mode Exit fullscreen mode

在上述代码中,我们分别调用了 ArkTools.hintGC()ArkTools.hintOldSpaceGC()ArkTools.hintCompressGC() 方法触发 Young GC、Old GC 和压缩 GC。

GC 日志分析

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

  • [HPP YoungGC]:表示年轻代 GC,主要回收年轻代空间。
  • [HPP OldGC]:表示老年代 GC,主要回收老年代空间。
  • [CompressGC]:表示压缩 GC,对整个堆空间进行压缩。
  • IsInBackground:表示应用是否在后台运行。
  • SensitiveStatus:表示是否处于性能敏感场景。
  • OnStartupEvent:表示是否处于应用冷启动场景。 通过分析 GC 日志,开发者可以了解 GC 触发的原因、耗时、内存占用等信息,从而优化内存管理策略,提升应用性能。 ### 总结 HPP GC 是 ArkTS 中高效且可靠的垃圾回收机制,通过混合算法和并行并发优化,实现了高效的内存回收,保证了应用的流畅运行。开发者可以通过了解 HPP 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