当前位置: 首页 > 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);

相关文章:

【HarmonyOS】- 内存优化

文章目录 知识回顾前言源码分析1. onMemoryLevel2. 使用LRUCache优化ArkTS内存原理介绍3. 使用生命周期管理优化ArkTS内存4. 使用purgeable优化C++内存拓展知识1. Purgeable Memory总结知识回顾 前言 当应用程序占用过多内存时,系统可能会频繁进行内存回收和重新分配,导致应…...

【生日视频制作】保时捷车主提车交车仪式感AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程保时捷车主提车交车仪式感AE模板修改文字特效广告生成神器素材祝福玩法AE模板工程 怎么如何做的【生日视频制作】保时捷车主提车交车仪式感AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 下载AE模板 安装AE软件 把AE模板导入…...

【自用14】C++俄罗斯方块-思路复盘3

在上篇降落函数中使用到了判断游戏是否结束的功能&#xff0c;因此这篇先从判断游戏是否结束开始 判断游戏是否结束 void failCheck(void){if(!moveable(START_X,START_Y,MOVE_DOWN,BLOCK_UP)){setcolor(WHITE);setfont(45,0,_T("隶体"));outtextxy(75,300,_T(&quo…...

ElasticSearch的DSL查询⑤(ES数据聚合、DSL语法数据聚合、RestClient数据聚合)

目录 一、数据聚合 1.1 DSL实现聚合 1.1.1 Bucket聚合 1.1.2 带条件聚合 1.1.3 Metric聚合 1.1.4 总结 2.1 RestClient实现聚合 2.1.1 Bucket聚合 2.1.2 带条件聚合 2.2.3 Metric聚合 一、数据聚合 聚合&#xff08;aggregations&#xff09;可以让我们极其方便的实…...

DBeaver 24.0 高阶用法

DBeaver 24.0 高阶用法 文章目录 DBeaver 24.0 高阶用法DBeaver 介绍功能一、元数据搜索功能二、仪表盘显示功能三、ER图功能四、导出数据最后 DBeaver 介绍 DBeaver 确实是一款功能强大的通用数据库管理工具&#xff0c;适合所有需要以专业方式处理数据的用户。它不仅提供了直…...

外卖会员卡项目骗局揭秘,你还在做梦吗?改醒醒了

大家好&#xff0c;我是鲸天科技千千&#xff0c;大家都知道我是做开发的&#xff0c;做互联网行业很多年了&#xff0c;平时会在这里给大家分享一些互联网相关的小技巧和小项目&#xff0c;感兴趣的给我点个关注。 关于外卖会员卡这个项目的一些骗局和套路&#xff0c;我真的…...

比较顺序3s1,3s2,4s1之间的关系

(A,B)---6*30*2---(0,1)(1,0) 分类A和B&#xff0c;让B全是0。当收敛误差为7e-4&#xff0c;收敛199次取迭代次数平均值&#xff0c;3s1为 3s2为 4s1为 3s1&#xff0c;3s2&#xff0c;4s1这3个顺序之间是否有什么联系 &#xff0c; 因为4s1可以按照结构加法 变换成与4s1内在…...

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录 [web][极客大挑战 2019]Http 考点&#xff1a;Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点&#xff1a;弱密码字典爆破 四种方法&#xff1a; [web][极客大挑战 2019]Http 考点&#xff1a;Referer协议、UA协议、X-Forwarded-For协议 访问…...

数据库锁之行级锁、记录锁、间隙锁和临键锁

1. 行级锁 InnoDB 引擎支持行级锁&#xff0c;而MyISAM 引擎不支持行级锁&#xff0c;只支持表级锁。行级锁是基于索引实现的。 对于普通的select语句&#xff0c;是不会加记录锁的&#xff0c;因为它属于快照读&#xff0c;通过在MVCC中的undo log版本链实现。如果要在查询时对…...

基于yolov8的血细胞检测计数系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的血细胞检测与计数系统是一种利用深度学习技术&#xff0c;特别是YOLOv8目标检测算法&#xff0c;实现高效、准确血细胞识别的系统。该系统能够自动识别并计数图像或视频中的血细胞&#xff0c;包括红细胞、白细胞和血小板等&#xff0c;为医疗诊断提…...

【深度学习详解】Task3 实践方法论-分类任务实践 Datawhale X 李宏毅苹果书 AI夏令营

前言 综合之前的学习内容&#xff0c; 本篇将探究机器学习实践方法论 出现的问题及其原因 &#x1f34e; &#x1f34e; &#x1f34e; 系列文章导航 【深度学习详解】Task1 机器学习基础-线性模型 Datawhale X 李宏毅苹果书 AI夏令营 【深度学习详解】Task2 分段线性模型-引入…...

乐凡北斗 | 手持北斗智能终端的作用与应用场景

在科技日新月异的今天&#xff0c;北斗智能终端作为一项融合了北斗导航系统与现代智能技术的创新成果&#xff0c;正悄然改变着我们的生活方式和工作模式。 ​北斗智能终端&#xff0c;是以北斗卫星导航系统为核心&#xff0c;集成了高精度定位、导航、授时等功能的智能设备。它…...

Linux:线程互斥

线程互斥 先看到一个抢票案例&#xff1a; class customer { public:int _ticket_num 0;pthread_t _tid;string _name; };int g_ticket 10000;void* buyTicket(void* args) {customer* cust (customer*)args;while(true){if(g_ticket > 0){usleep(1000);cout << …...

misc流量分析

一、wireshark语法 1、wireshark过滤语法 &#xff08;1&#xff09;过滤IP地址 ip.srcx.x..x.x 过滤源IP地址 ip.dstx.x.x.x 过滤目的IP ip.addrx.x.x.x 过滤某个IP &#xff08;2&#xff09;过滤端口号 tcp.port80tcp.srcport80 显示TCP的源端口80tcp.dstport80 显示…...

Linux驱动(五):Linux2.6驱动编写之设备树

目录 前言一、设备树是个啥&#xff1f;二、设备树编写语法规则1.文件类型2.设备树源文件&#xff08;DTS&#xff09;结构3.设备树源文件&#xff08;DTS&#xff09;解析 三、设备树API函数1.在内核中获取设备树节点&#xff08;三种&#xff09;2.获取设备树节点的属性 四、…...

算法【Java】 —— 前缀和

模板引入 一维前缀和 https://www.nowcoder.com/share/jump/9257752291725692504394 解法一&#xff1a;暴力枚举 在每次提供 l 与 r 的时候&#xff0c;都从 l 开始遍历数组&#xff0c;直到遇到 r 停止&#xff0c;这个方法的时间复杂度为 O(N * q) 解法二&#xff1a;前…...

python网络爬虫(四)——实战练习

0.为什么要学习网络爬虫 深度学习一般过程:   收集数据&#xff0c;尤其是有标签、高质量的数据是一件昂贵的工作。   爬虫的过程&#xff0c;就是模仿浏览器的行为&#xff0c;往目标站点发送请求&#xff0c;接收服务器的响应数据&#xff0c;提取需要的信息&#xff0c…...

tio websocket 客户端 java 代码 工具类

为了更好地组织代码并提高可复用性&#xff0c;我们可以将WebSocket客户端封装成一个工具类。这样可以在多个地方方便地使用WebSocket客户端功能。以下是使用tio库实现的一个WebSocket客户端工具类。 1. 添加依赖 确保项目中添加了tio的依赖。如果使用的是Maven&#xff0c;可以…...

通过卷积神经网络(CNN)识别和预测手写数字

一&#xff1a;卷积神经网络&#xff08;CNN&#xff09;和手写数字识别MNIST数据集的介绍 卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称CNN&#xff09;是一种深度学习模型&#xff0c;它在图像和视频识别、分类和分割任务中表现出色。CNN通过模仿…...

【A题第二套完整论文已出】2024数模国赛A题第二套完整论文+可运行代码参考(无偿分享)

“板凳龙” 闹元宵路径速度问题 摘要 本文针对传统舞龙进行了轨迹分析&#xff0c;并针对一系列问题提出了解决方案&#xff0c;将这一运动进行了模型可视化。 针对问题一&#xff0c;我们首先对舞龙的螺线轨迹进行了建模&#xff0c;将直角坐标系转换为极坐标系&#xff0…...

风控系统如何全维度识别爬虫:IP、账号与行为的协同决策机制

1. 这不是“反爬失败”&#xff0c;而是风控系统在对你做全维度画像你写完一段 requests BeautifulSoup 的代码&#xff0c;本地跑通了&#xff0c;开开心心部署到服务器&#xff0c;结果第二天早上发现&#xff1a;所有请求返回 403&#xff0c;日志里全是空响应&#xff1b;…...

在模型广场灵活选型让我找到了更适合代码生成的Taotoken模型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在模型广场灵活选型让我找到了更适合代码生成的Taotoken模型 开发代码辅助工具时&#xff0c;选择合适的模型是平衡效果与成本的关…...

如何通过Joy-Con Toolkit实现专业级Switch手柄控制与硬件逆向工程

如何通过Joy-Con Toolkit实现专业级Switch手柄控制与硬件逆向工程 【免费下载链接】jc_toolkit Joy-Con Toolkit 项目地址: https://gitcode.com/gh_mirrors/jc/jc_toolkit 在游戏开发、硬件调试和嵌入式系统研究中&#xff0c;与游戏手柄等专业输入设备进行深度交互一直…...

Style-Bert-VITS2未来发展方向:从语音克隆到实时语音转换的技术演进路线

Style-Bert-VITS2未来发展方向&#xff1a;从语音克隆到实时语音转换的技术演进路线 【免费下载链接】Style-Bert-VITS2 Style-Bert-VITS2: Bert-VITS2 with more controllable voice styles. 项目地址: https://gitcode.com/gh_mirrors/st/Style-Bert-VITS2 Style-Bert…...

AI 应用原型开发阶段利用 Taotoken 快速进行多模型效果对比

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 AI 应用原型开发阶段利用 Taotoken 快速进行多模型效果对比 在构建一个 AI 应用的原型时&#xff0c;开发者常常面临一个核心问题&…...

Sora 2原生MP4输出不兼容Premiere Pro?揭秘H.264/H.265封装层4大隐性缺陷(附MediaInfo诊断模板+自动修复脚本)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Sora 2原生MP4输出不兼容Premiere Pro的根源定位 Sora 2生成的原生MP4文件虽符合ISO/IEC 14496-14规范&#xff0c;但其底层封装结构与Adobe Premiere Pro对时间码、元数据及视频流编码参数的严格校验逻辑存在…...

全方位梳理 OpenClaw 部署与使用干货

OpenClaw 一键安装包&#xff5c;可视化部署&#xff0c;简化环境配置流程 ✨适配系统&#xff1a;Windows10/11 64 位 当前版本&#xff1a;v2.7.5&#xff08;虾壳云版&#xff09; ✨核心优势&#xff1a;全程可视化操作&#xff0c;不用命令行、不用手动配置 Python/Node…...

Midjourney模糊效果深度拆解(从--stylize到--sref的光学模拟原理揭秘)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Midjourney模糊效果的本质与视觉认知基础 Midjourney 中的模糊效果并非图像后处理意义上的高斯模糊&#xff08;Gaussian Blur&#xff09;&#xff0c;而是由扩散模型在潜空间中对高频细节进行概率性抑制所…...

C++的单例模式及其作用

什么是单例模式&#xff1f;无论是在面向对象编程还是软件架构中&#xff0c;单例模式都扮演着至关重要的角色。它不仅能够确保一个类只有一个实例存在&#xff0c;还能够提供全局访问点&#xff0c;使得我们可以方便地在程序的任何地方使用该实例。但有几个设计模式并非解决抽…...

抖音批量下载神器:5分钟学会免费无水印视频下载

抖音批量下载神器&#xff1a;5分钟学会免费无水印视频下载 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖…...