千家信息网

Android中如何实现垃圾回收

发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,这篇文章主要介绍"Android中如何实现垃圾回收",在日常操作中,相信很多人在Android中如何实现垃圾回收问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Andro
千家信息网最后更新 2025年01月21日Android中如何实现垃圾回收

这篇文章主要介绍"Android中如何实现垃圾回收",在日常操作中,相信很多人在Android中如何实现垃圾回收问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Android中如何实现垃圾回收"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

首先所有的类都会虚继承refbase类,因为它实现了达到Android垃圾回收所需要的所有function,因此实际上所有的对象声明出来以后都具备了自动释放自己的能力,也就是说实际上智能指针就是我们的对象本身,它会维持一个对本身强引用和弱引用的计数,一旦强引用计数为0它就会释放掉自己。

首先我们看sp,sp实际上不是smart pointer的缩写,而是strong pointer,它实际上内部就包含了一个指向对象的指针而已。我们可以简单看看sp的一个构造函数:

template< typename T> sp< T>::sp(T* other)  : m_ptr(other)  {  if (other) other->incStrong(this);  }

比如说我们声明一个对象:

sp< CameraHardwareInterface> hardware(new CameraHal());

实际上sp指针对本身没有进行什么操作,就是一个指针的赋值,包含了一个指向对象的指针,但是对象会对对象本身增加一个强引用计数,这个 incStrong的实现就在refbase类里面。新new出来一个CameraHal对象,将它的值给 sp< CameraHardwareInterface>的时候,它的强引用计数就会从0变为1。因此每次将对象赋值给一个sp指针的时候,对象的强引用计数都会加1,下面我们再看看sp的析构函数:

template< typename T> sp< T>::~sp()  {  if (m_ptr) m_ptr->decStrong(this);  }

实际上每次delete一个sp对象的时候,sp指针指向的对象的强引用计数就会减一,当对象的强引用技术 为0的时候这个对象就会被自动释放掉。
我们再看wp,wp就是weak pointer的缩写,弱引用指针的原理 ,就是为了应用Android垃圾回收来减少对那些胖子对象对内存的占用,我们首先来看wp的一个构造函数:

wp< T>::wp(T* other)  : m_ptr(other)  {  if (other) m_refs = other->createWeak(this);  }

它和sp一样实际上也就是仅仅对指针进行了赋值而已,对象本身会增加一个对自身的弱引用计数,同时wp还包含一个m_ref指针,这个指针主要是用来将wp升级为sp时候使用的:

template< typename T> sp< T> wp< T>::promote() const  {  return sp< T>(m_ptr, m_refs);  }  template< typename T> sp< T>::sp(T* p, weakref_type* refs)  : m_ptr((p && refs->attemptIncStrong(this)) ? p : 0)  {  }

实际上我们对wp指针***能做的就是将wp指针升级为一个sp指针,然后判断是否升级成功,如果成功说明对象依旧存在,如果失败说明对象已经被释放掉了。wp指针我现在看到的是在单例中使用很多,确保mhardware对象只有一个,比如:

wp< CameraHardwareInterface> CameraHardwareStub::singleton;  sp< CameraHardwareInterface> CameraHal::createInstance()  {  LOG_FUNCTION_NAME  if (singleton != 0) {  sp< CameraHardwareInterface> hardware = singleton.promote();  if (hardware != 0) {  return hardware;  }  }  sp< CameraHardwareInterface> hardware(new CameraHal()); //强引用加1  singleton = hardware;//弱引用加1  return hardware;//赋值构造函数,强引用加1  }  //hardware被删除,强引用减1

到此,关于"Android中如何实现垃圾回收"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

对象 指针 实际 实际上 垃圾 就是 时候 函数 学习 指向 升级 成功 也就是 更多 缩写 帮助 实用 接下来 也就是说 原理 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 方舟手游私人服务器怎么购买 赛元微方案软件开发 宝山区微型软件开发工艺 橡果网络技术 劳动仲裁 勒索病毒触犯网络安全法 西安卡拉克网络技术有限公司 北仑游戏软件开发公司电话 邮箱 数据库 网络安全教育版画 幻塔红石柱服务器列表 湖南商骐网络技术 成都贴心伴侣网络技术有限公司 延庆区网络技术信息热线 如何将问卷答案连接到数据库 网络安全和信息化啥单位 吃鸡的服务器满载 数据库应用技术阶段性考试 数据库建立表与表之间的关系 关于社区网络安全的通知 软件开发大概成本需要多少 sql 查询 所有数据库 人工智能面临的网络安全问题 网络安全技术综合实验任务书 怎么入公安DNA数据库 2ksports服务器怎么连 热血传奇各区服务器 哪种linux做服务器好用 连接数据库的jar包怎么弄 用map遍历数据库表 广电家庭服务器亮黄灯如何解决
0