日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Android垃圾回收實(shí)質(zhì)內(nèi)容解析

Android手機(jī)操作系統(tǒng)中的代碼編寫方式對于有基礎(chǔ)的編程人員來說是比較容易的。因?yàn)樗腔贚inux平臺的操作系統(tǒng)。我們在這里為大家介紹的是Android垃圾回收這一機(jī)制,以加深大家對這一系統(tǒng)的了解。#t#

創(chuàng)新互聯(lián)于2013年成立,先為花溪等服務(wù)建站,花溪等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為花溪企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

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

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

首先我們看sp,sp實(shí)際上不是smart pointer的縮寫,而是strong pointer,它實(shí)際上內(nèi)部就包含了一個指向?qū)ο蟮闹羔樁?。我們可以簡單看看sp的一個構(gòu)造函數(shù):

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

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

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

實(shí)際上sp指針對本身沒有進(jìn)行什么操作,就是一個指針的賦值,包含了一個指向?qū)ο蟮闹羔槪菍ο髸ο蟊旧碓黾右粋€強(qiáng)引用計(jì)數(shù),這個 incStrong的實(shí)現(xiàn)就在refbase類里面。新new出來一個CameraHal對象,將它的值給 sp< CameraHardwareInterface>的時(shí)候,它的強(qiáng)引用計(jì)數(shù)就會從0變?yōu)?。因此每次將對象賦值給一個sp指針的時(shí)候,對象的強(qiáng)引用計(jì)數(shù)都會加1,下面我們再看看sp的析構(gòu)函數(shù):

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

實(shí)際上每次delete一個sp對象的時(shí)候,sp指針指向的對象的強(qiáng)引用計(jì)數(shù)就會減一,當(dāng)對象的強(qiáng)引用技術(shù) 為0的時(shí)候這個對象就會被自動釋放掉。
我們再看wp,wp就是weak pointer的縮寫,弱引用指針的原理 ,就是為了應(yīng)用Android垃圾回收來減少對那些胖子對象對內(nèi)存的占用,我們首先來看wp的一個構(gòu)造函數(shù):

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

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

 
 
 
  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. {
  10. }

實(shí)際上我們對wp指針***能做的就是將wp指針升級為一個sp指針,然后判斷是否升級成功,如果成功說明對象依舊存在,如果失敗說明對象已經(jīng)被釋放掉了。wp指針我現(xiàn)在看到的是在單例中使用很多,確保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()); //強(qiáng)引用加1
  12. singleton = hardware;//弱引用加1
  13. return hardware;//賦值構(gòu)造函數(shù),強(qiáng)引用加1
  14. }
  15. //hardware被刪除,強(qiáng)引用減1 

Android垃圾回收的相關(guān)內(nèi)容就為大家介紹到這里。


分享題目:Android垃圾回收實(shí)質(zhì)內(nèi)容解析
瀏覽路徑:http://www.dlmjj.cn/article/djihosd.html