www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 單片機(jī) > 程序員小灰
[導(dǎo)讀]—————?第二天?—————————————————想要了解clone方法的小伙伴,可以看看之前所講解?原型模式?getClass()getClass方法是干什么的呢?首先,getClass方法用于獲取一個(gè)對(duì)象的運(yùn)行時(shí)類(lèi)(Class),進(jìn)而通過(guò)返回的Class對(duì)象,獲取該類(lèi)的相...



—————? 第二天? —————





————————————




想要了解clone方法的小伙伴,可以看看之前所講解?
原型模式

?

getClass()


getClass方法是干什么的呢?首先,getClass方法用于獲取一個(gè)對(duì)象的運(yùn)行時(shí)類(lèi)(Class),進(jìn)而通過(guò)返回的Class對(duì)象,獲取該類(lèi)的相關(guān)信息,比如獲取該類(lèi)的構(gòu)造方法、該類(lèi)有哪些方法、該類(lèi)有哪些成員變量等信息。



//?Java用native方法實(shí)現(xiàn)?getClass()
public?final?native?Class?getClass();
//?Android?特殊的實(shí)現(xiàn)方式

private?transient?Class?shadow$_klass_;
public?final?Class?getClass()?{
????return?shadow$_klass_;
}

Java默認(rèn)的Hotspot虛擬機(jī)并沒(méi)有開(kāi)辟單獨(dú)的Method Area空間,而是有GC Heap的老生代的Metaspace實(shí)現(xiàn)的。而Android采用ART VM,這才造成了這種差異。大黃:這是因?yàn)槭?/span>

?

finalize()


finalize()方法,是Object的protected方法,在發(fā)生GC時(shí)觸發(fā)該方法。


該方法的大致流程,是當(dāng)對(duì)象變成GC Roots不可達(dá)時(shí),GC判斷該對(duì)象是否覆蓋了finalize()方法,若未覆蓋,則直接將其回收;否則,若對(duì)象未執(zhí)行過(guò)finalize()方法,將其放入F-Queue隊(duì)列,由一低優(yōu)先級(jí)線程執(zhí)行該隊(duì)列中對(duì)象的finalize()方法。


執(zhí)行finalize()方法完畢后,GC會(huì)再次判斷該對(duì)象是否可達(dá),若不可達(dá),則進(jìn)行回收;否則,對(duì)象“復(fù)活”。


子類(lèi)可以override該方法,用于防止對(duì)象被回收,亦或是防止對(duì)象不被回收。


要防止對(duì)象被回收,只需讓該對(duì)象與GC ROOTS之間存在可達(dá)鏈即可。


我們重點(diǎn)看看FileInputStream、FileOutputStream、Connection等類(lèi)怎么防止用戶忘記釋放資源吧,如下是FileInputStream的部分源碼:

?

protected?void?finalize()?throws?IOException?{
????//?Android新增?CloseGuard確保FlieInputStream回收更安全
????if?(guard?!=?null)?{
????????guard.warnIfOpen();
????}
????//Java利用?FileDescriptor確保FileInputStream不可達(dá),可以被安全回收
????if?((fd?!=?null)?
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉