日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

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



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





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




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

?

getClass()


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



//?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)有開辟單獨(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ù)活”。


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


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


我們重點(diǎn)看看FileInputStream、FileOutputStream、Connection等類怎么防止用戶忘記釋放資源吧,如下是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)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉