成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android垃圾回收實質內容解析

移動開發 Android
Android垃圾回收的實現其實可以看做是對sp以及wp的操作。我們將會在這篇文章中對這兩種操作分別做一詳細介紹。讓大家充分掌握這一方面的知識。

Android手機操作系統中的代碼編寫方式對于有基礎的編程人員來說是比較容易的。因為它是基于Linux平臺的操作系統。我們在這里為大家介紹的是Android垃圾回收這一機制,以加深大家對這一系統的了解。#t#

個人覺得sp和wp實際上就是Android 為其c++實現的自動垃圾 回收機制 ,具體到內部實現,sp和wp實際上只是一個實現垃圾回收功能的接口而已,比如說對*,->的重載,是為了其看起來跟真正的指針一樣,而真正實現垃圾回收的是refbase這個基類。這部分代碼的目錄在:/frameworks/base/include/utils/RefBase.h

首先所有的類都會虛繼承refbase類,因為它實現了達到Android垃圾回收所需要的所有function,因此實際上所有的對象聲明出來以后都具備了自動釋放自己的能力,也就是說實際上智能指針就是我們的對象本身,它會維持一個對本身強引用和弱引用的計數,一旦強引用計數為0它就會釋放掉自己。

首先我們看sp,sp實際上不是smart pointer的縮寫,而是strong pointer,它實際上內部就包含了一個指向對象的指針而已。我們可以簡單看看sp的一個構造函數:

  1. template< typename T> 
  2. sp< T>::sp(T* other)  
  3. : m_ptr(other)  
  4. {  
  5. if (other) other->incStrong(this);  

比如說我們聲明一個對象:

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

實際上sp指針對本身沒有進行什么操作,就是一個指針的賦值,包含了一個指向對象的指針,但是對象會對對象本身增加一個強引用計數,這個 incStrong的實現就在refbase類里面。新new出來一個CameraHal對象,將它的值給 sp< CameraHardwareInterface>的時候,它的強引用計數就會從0變為1。因此每次將對象賦值給一個sp指針的時候,對象的強引用計數都會加1,下面我們再看看sp的析構函數:

  1. template< typename T> 
  2. sp< T>::~sp()  
  3. {  
  4. if (m_ptr) m_ptr->decStrong(this);  

實際上每次delete一個sp對象的時候,sp指針指向的對象的強引用計數就會減一,當對象的強引用技術 為0的時候這個對象就會被自動釋放掉。
我們再看wp,wp就是weak pointer的縮寫,弱引用指針的原理 ,就是為了應用Android垃圾回收來減少對那些胖子對象對內存的占用,我們首先來看wp的一個構造函數:

  1. wp< T>::wp(T* other)  
  2. : m_ptr(other)  
  3. {  
  4. if (other) m_refs = other->createWeak(this);  

它和sp一樣實際上也就是僅僅對指針進行了賦值而已,對象本身會增加一個對自身的弱引用計數,同時wp還包含一個m_ref指針,這個指針主要是用來將wp升級為sp時候使用的:

  1. template< typename T> 
  2. sp< T> wp< T>::promote() const  
  3. {  
  4. return sp< T>(m_ptr, m_refs);  
  5. }  
  6. template< typename T> 
  7. sp< T>::sp(T* p, weakref_type* refs)  
  8. : m_ptr((p && refs->attemptIncStrong(this)) ? p : 0)  
  9. {  

實際上我們對wp指針***能做的就是將wp指針升級為一個sp指針,然后判斷是否升級成功,如果成功說明對象依舊存在,如果失敗說明對象已經被釋放掉了。wp指針我現在看到的是在單例中使用很多,確保mhardware對象只有一個,比如:

  1. wp< CameraHardwareInterface> CameraHardwareStub::singleton;  
  2. sp< CameraHardwareInterface> CameraHal::createInstance()  
  3. {  
  4. LOG_FUNCTION_NAME  
  5. if (singleton != 0) {  
  6. sp< CameraHardwareInterface> hardware = singleton.promote();  
  7. if (hardware != 0) {  
  8. return hardware;  
  9. }  
  10. }  
  11. sp< CameraHardwareInterface> hardware(new CameraHal()); //強引用加1  
  12. singleton = hardware;//弱引用加1  
  13. return hardware;//賦值構造函數,強引用加1  
  14. }  
  15. //hardware被刪除,強引用減1  

Android垃圾回收的相關內容就為大家介紹到這里。

責任編輯:曹凱 來源: CSDN
相關推薦

2017-08-04 10:53:30

回收算法JVM垃圾回收器

2022-01-20 10:34:49

JVM垃圾回收算法

2010-10-13 10:24:38

垃圾回收機制JVMJava

2021-01-04 10:08:07

垃圾回收Java虛擬機

2022-03-21 11:33:11

JVM垃圾回收器垃圾回收算法

2010-09-27 09:01:26

JVM分代垃圾回收

2010-02-24 15:28:59

WCF ABC

2021-11-05 15:23:20

JVM回收算法

2010-03-02 16:28:11

WCF發布訂閱

2010-12-13 11:14:04

Java垃圾回收算法

2023-08-08 10:29:55

JVM優化垃圾回收

2020-07-09 08:26:42

Kubernetes容器開發

2009-06-25 17:48:24

Java垃圾回收

2021-03-03 08:13:57

模式垃圾回收

2023-12-19 21:52:51

Go垃圾回收開發

2025-05-16 08:00:00

2017-02-21 16:40:16

Android垃圾回收內存泄露

2010-02-25 09:36:28

WCF行為控制

2009-12-30 10:14:29

JVM垃圾回收

2010-09-25 15:33:19

JVM垃圾回收
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 自拍视频一区二区三区 | 蜜桃av一区二区三区 | 国产特级毛片aaaaaa | 国产在线精品一区二区三区 | 久久久久国产一区二区三区 | 亚洲精品乱码久久久久久按摩观 | av性色全交蜜桃成熟时 | 免费欧美 | 老司机久久| 国产精品成人一区二区三区 | 国产三级| 久草网址 | 午夜精品久久久久久久久久久久久 | 99reav | 精品国产一级片 | 天堂综合网 | 欧美精品一区在线 | 成人在线免费视频 | 欧美一区二区三区高清视频 | 四季久久免费一区二区三区四区 | 久久精品一区二区三区四区 | 综合久久久久 | 中文字幕一区二区三 | 日韩欧美在线免费观看 | 日韩一区二区福利视频 | 成人欧美一区二区 | 日本精品视频 | 国产精品精品视频一区二区三区 | 国产91在线 | 亚洲 | 日韩在线播放一区 | 中文字幕高清免费日韩视频在线 | 日韩美香港a一级毛片免费 国产综合av | 日日日操 | 国产 日韩 欧美 中文 在线播放 | 久久久久亚洲精品中文字幕 | 中文字幕日韩一区二区 | 色免费视频 | 日韩成人一区 | 91精品在线播放 | 九九热免费在线观看 | 久久国产精99精产国高潮 |