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

HarmonyOS开发,A持有B,B引用A的场景会不会导致内存泄漏,看这里!

问题 :A持有B,B引用A的场景会不会导致内存泄漏?

答案 :方舟虚拟机的内存管理和GC采用的是根可达算法,根可达算法可以解决循环引用问题,不会导致A引用B,B引用A的内存泄漏。

根可达算法原理

根可达算法以一系列被称为 “根对象”(如栈中的局部变量、静态变量等)作为起始点,从这些根对象开始向下搜索,能够被搜索到的对象被认为是可达对象,而那些无法被搜索到的对象则被判定为不可达对象,会在垃圾回收时被清理。所以,即使存在对象之间的循环引用,只要它们都不可达(即没有根对象能引用到它们),就会被回收。

示例代码:

1. 定义类 A :

class A {b: B | null = null;constructor() {console.log(TEST_TAG, 'A 实例被创建');}setB(b: B) {this.b = b;}
}

2. 定义类 B :

class B {a: A | null = null;constructor() {console.log(TEST_TAG, 'B 实例被创建');}setA(a: A) {this.a = a;}
}

3. 主函数调用

@Entry
@Component
struct MyTestP

http://www.mrgr.cn/news/95294.html

相关文章:

  • 电机控制常见面试问题(十四)
  • 软件设计师笔记持续更新-看学以致知视频笔记
  • 前后端项目
  • Django之旅:第三节--templates模版的使用
  • 在 Spring Boot 中调用 AnythingLLM 的发消息接口
  • Kafka自定义分区机制
  • Java后端开发技术详解
  • 详解string类+迭代器
  • Java并发编程面试代码练习
  • 【AIGC】Win10系统极速部署Docker+Ragflow+Dify
  • Rust与Java对比
  • 关于运行 npm run serve/dev 运行不起来,node_modules Git忽略不了等(问题)
  • 【C++语言】继承和多态常见的面试问题
  • AI大白话(三):深度学习——AI的‘大脑‘是如何构建的?
  • python3 -m http.sever 8080加载不了解决办法
  • java项目之基于ssm的疫苗预约系统(源码+文档)
  • 【小也的Java之旅系列】01 分布式、集群、微服务的区别
  • 【sgFloatDialog】自定义组件:浮动弹窗,支持修改尺寸、拖拽位置、最大化、还原、最小化、复位
  • 正则表达式详解(regular expression)
  • Spring学习