当前位置: 首页 > news >正文

【HarmonyOS】- 内存优化

文章目录

  • 知识回顾
  • 前言
  • 源码分析
    • 1. onMemoryLevel
    • 2. 使用LRUCache优化ArkTS内存
        • 原理介绍
    • 3. 使用生命周期管理优化ArkTS内存
    • 4. 使用purgeable优化C++内存
  • 拓展知识
    • 1. Purgeable Memory
  • 总结


知识回顾

前言

当应用程序占用过多内存时,系统可能会频繁进行内存回收和重新分配,导致应用程序的性能下降,甚至出现崩溃和卡顿的情况。通过减少应用内存的占用,可以有效提高应用的性能和响应速度,节省系统资源,让设备的运行效率更高,延长设备的续航时间。开发者应该在应用开发过程中注重内存管理,积极采取措施来减少内存占用,以优化应用程序的性能和用户体验。

HarmonyOS提供了一些内存管理的工具和接口,帮助开发者有效地管理内存资源。其中,onMemoryLevell接口可以监听系统内存的变化,并做根据系统内存的实时情况,动态地调整应用程序的内存,以避免内存过度占用导致的性能问题。LRUCache用于在缓存空间不够的时候,将近期最少使用的数据替换为新数据。在生命周期管理中,可以释放不再使用的系统资源,包括应用内存、监听事件、网络句柄等。在Purgeable Memory内存管理机制中,开发者可以通过使用相关接口创建PurgeableMemory对象,从而管理purgeable内存。


源码分析

1. onMemoryLevel

在这里插入图片描述


2. 使用LRUCache优化ArkTS内存

LRU(Least Recently Used, 最近最少使用)是一种常见的算法,其核心思想是基于时间局部性原理,即如果一个数据在最近被访问过,那么它在未来被访问的概率也会比较高。

LRUCache是ArkTS中常用的工具函数,是基于LRU实现的缓存工具,常用于缓存一些频繁访问的数据,例如常用的图片、网络请求的结果等。LRUCache通过维护一个缓存空间来存储数据,当缓存空间不足时,会根据LRU算法将最近最少使用的数据替换掉,以保证缓存空间的有效利用。因此,LRUCache会根据数据的访问顺序来进行数据替换,优先淘汰最久未被访问的数据。

原理介绍

LRUCache通过LinkedHashMap来实现LRU的,LinkedHashMap继承于HashMap,HashMap用于快速查找数据,LinkedHashMap双向链表用于记录数据的顺序关系。所以,对于get、put、remove等操作,LinkedHashMap除了包含HashMap的功能,还需要实现调整Entry顺序链表的工作。

import { util } from '@kit.ArkTS';export class LRUCacheUtil {private static instance: LRUCacheUtil;private lruCache: util.LRUCache<string, Object>;private constructor() {this.lruCache = new util.LRUCache(64);
http://www.lryc.cn/news/432987.html

相关文章:

  • 【生日视频制作】保时捷车主提车交车仪式感AE模板修改文字软件生成器教程特效素材【AE模板】
  • 【自用14】C++俄罗斯方块-思路复盘3
  • ElasticSearch的DSL查询⑤(ES数据聚合、DSL语法数据聚合、RestClient数据聚合)
  • DBeaver 24.0 高阶用法
  • 外卖会员卡项目骗局揭秘,你还在做梦吗?改醒醒了
  • 比较顺序3s1,3s2,4s1之间的关系
  • BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin
  • 数据库锁之行级锁、记录锁、间隙锁和临键锁
  • 基于yolov8的血细胞检测计数系统python源码+onnx模型+评估指标曲线+精美GUI界面
  • 【深度学习详解】Task3 实践方法论-分类任务实践 Datawhale X 李宏毅苹果书 AI夏令营
  • 乐凡北斗 | 手持北斗智能终端的作用与应用场景
  • Linux:线程互斥
  • misc流量分析
  • Linux驱动(五):Linux2.6驱动编写之设备树
  • 算法【Java】 —— 前缀和
  • python网络爬虫(四)——实战练习
  • tio websocket 客户端 java 代码 工具类
  • 通过卷积神经网络(CNN)识别和预测手写数字
  • 【A题第二套完整论文已出】2024数模国赛A题第二套完整论文+可运行代码参考(无偿分享)
  • 一份热乎的数据分析(数仓)面试题 | 每天一点点,收获不止一点
  • 3 html5之css新选择器和属性
  • 【Kubernetes】K8s 的鉴权管理(一):基于角色的访问控制(RBAC 鉴权)
  • 保研 比赛 利器: 用AI比赛助手降维打击数学建模
  • 秋招校招,在线性格测评应该如何应对
  • chrome 插件开发入门
  • 揭开面纱--机器学习
  • Python中的私有属性与方法:解锁面向对象编程的秘密
  • 开篇_____何谓安卓机型“工程固件” 与其他固件的区别 作用
  • DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed
  • 三个月涨粉两万,只因为知道了这个AI神器