Java弱引用的理解與使用-創(chuàng)新互聯(lián)

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

成都創(chuàng)新互聯(lián)公司成立10年來(lái),這條路我們正越走越好,積累了技術(shù)與客戶資源,形成了良好的口碑。為客戶提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站策劃、網(wǎng)頁(yè)設(shè)計(jì)、域名注冊(cè)、網(wǎng)絡(luò)營(yíng)銷、VI設(shè)計(jì)、網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。網(wǎng)站是否美觀、功能強(qiáng)大、用戶體驗(yàn)好、性價(jià)比高、打開(kāi)快等等,這些對(duì)于網(wǎng)站建設(shè)都非常重要,成都創(chuàng)新互聯(lián)公司通過(guò)對(duì)建站技術(shù)性的掌握、對(duì)創(chuàng)意設(shè)計(jì)的研究為客戶提供一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進(jìn)步。

  在Java里, 當(dāng)一個(gè)對(duì)象o被創(chuàng)建時(shí), 它被放在Heap里. 當(dāng)GC運(yùn)行的時(shí)候, 如果發(fā)現(xiàn)沒(méi)有任何引用指向o, o就會(huì)被回收以騰出內(nèi)存空間. 或者換句話說(shuō), 一個(gè)對(duì)象被回收, 必須滿足兩個(gè)條件: 1)沒(méi)有任何引用指向它 2)GC被運(yùn)行.

  在現(xiàn)實(shí)情況寫代碼的時(shí)候, 我們往往通過(guò)把所有指向某個(gè)對(duì)象的referece置空來(lái)保證這個(gè)對(duì)象在下次GC運(yùn)行的時(shí)候被回收 (可以用java -verbose:gc來(lái)觀察gc的行為)

  Object c = new Car();

  c=null;

  但是, 手動(dòng)置空對(duì)象對(duì)于程序員來(lái)說(shuō), 是一件繁瑣且違背自動(dòng)回收的理念的. 對(duì)于簡(jiǎn)單的情況, 手動(dòng)置空是不需要程序員來(lái)做的, 因?yàn)樵趈ava中, 對(duì)于簡(jiǎn)單對(duì)象, 當(dāng)調(diào)用它的方法執(zhí)行完畢后, 指向它的引用會(huì)被從stack中popup, 所以他就能在下一次GC執(zhí)行時(shí)被回收了.

  但是, 也有特殊例外. 當(dāng)使用cache的時(shí)候, 由于cache的對(duì)象正是程序運(yùn)行需要的, 那么只要程序正在運(yùn)行, cache中的引用就不會(huì)被GC給(或者說(shuō), cache中的reference擁有了和主程序一樣的life cycle). 那么隨著cache中的reference越來(lái)越多, GC無(wú)法回收的object也越來(lái)越多, 無(wú)法被自動(dòng)回收. 當(dāng)這些object需要被回收時(shí), 回收這些object的任務(wù)只有交給程序編寫者了. 然而這卻違背了GC的本質(zhì)(自動(dòng)回收可以回收的objects).

  所以, java中引入了weak reference. 相對(duì)于前面舉例中的strong reference:

  Object c = new Car(); //只要c還指向car object, car object就不會(huì)被回收

  當(dāng)一個(gè)對(duì)象僅僅被weak reference指向, 而沒(méi)有任何其他strong reference指向的時(shí)候, 如果GC運(yùn)行, 那么這個(gè)對(duì)象就會(huì)被回收. weak reference的語(yǔ)法是:

  WeakReference<Car> weakCar = new WeakReference(Car)(car);

  當(dāng)要獲得weak reference引用的object時(shí), 首先需要判斷它是否已經(jīng)被回收:

  weakCar.get();

  如果此方法為空, 那么說(shuō)明weakCar指向的對(duì)象已經(jīng)被回收了。

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

名稱欄目:Java弱引用的理解與使用-創(chuàng)新互聯(lián)
文章源于:http://bm7419.com/article10/dpdhdo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站品牌網(wǎng)站制作、搜索引擎優(yōu)化、面包屑導(dǎo)航商城網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)

廣告

聲明:本網(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)

外貿(mào)網(wǎng)站建設(shè)