内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

Android中如何實(shí)現(xiàn)垃圾回收-創(chuàng)新互聯(lián)

這篇文章主要介紹“Android中如何實(shí)現(xiàn)垃圾回收”,在日常操作中,相信很多人在Android中如何實(shí)現(xiàn)垃圾回收問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Android中如何實(shí)現(xiàn)垃圾回收”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

目前創(chuàng)新互聯(lián)公司已為1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、宜章網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

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

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

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

比如說(shuō)我們聲明一個(gè)對(duì)象:

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

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

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

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

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

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

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)  {  }

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

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()); //強(qiáng)引用加1  singleton = hardware;//弱引用加1  return hardware;//賦值構(gòu)造函數(shù),強(qiáng)引用加1  }  //hardware被刪除,強(qiáng)引用減1

到此,關(guān)于“Android中如何實(shí)現(xiàn)垃圾回收”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

分享名稱:Android中如何實(shí)現(xiàn)垃圾回收-創(chuàng)新互聯(lián)
標(biāo)題路徑:http://www.rwnh.cn/article14/csdide.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、虛擬主機(jī)做網(wǎng)站、企業(yè)網(wǎng)站制作網(wǎng)站改版、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
扬中市| 兰州市| 建湖县| 丰镇市| 通许县| 朝阳县| 休宁县| 福鼎市| 石屏县| 高唐县| 禹城市| 西城区| 和静县| 翁牛特旗| 锦屏县| 武夷山市| 富民县| 乐陵市| 阳曲县| 韶关市| 闻喜县| 南涧| 镇远县| 十堰市| 建平县| 长汀县| 扎鲁特旗| 台南市| 宜州市| 泾源县| 穆棱市| 武川县| 宽甸| 瑞金市| 亳州市| 滨州市| 隆昌县| 澜沧| 太谷县| 沭阳县| 兴和县|