GC會(huì)stop the world。會(huì)暫停程序的執(zhí)行,帶來(lái)延遲的代價(jià)。所以在開(kāi)發(fā)中,我們不希望GC的次數(shù)過(guò)多。
目前創(chuàng)新互聯(lián)公司已為成百上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站托管運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、河?xùn)|網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
本文將討論如何在開(kāi)發(fā)中改善各種細(xì)節(jié),從而減少GC的次數(shù)。
(1)對(duì)象不用時(shí)最好顯式置為 Null
一般而言,為 Null 的對(duì)象都會(huì)被作為垃圾處理,所以將不用的對(duì)象顯式地設(shè)
為 Null,有利于 GC 收集器判定垃圾,從而提高了 GC 的效率。
(2)盡量少用 System.gc()
此函數(shù)建議 JVM進(jìn)行主 GC,雖然只是建議而非一定,但很多情況下它會(huì)觸發(fā)
主 GC,從而增加主 GC 的頻率,也即增加了間歇性停頓的次數(shù)。
(3)盡量少用靜態(tài)變量
靜態(tài)變量屬于全局變量,不會(huì)被 GC 回收,它們會(huì)一直占用內(nèi)存。
(4)盡量使用 StringBuffer,而不用 String 來(lái)累加字符串
由于 String 是固定長(zhǎng)的字符串對(duì)象,累加 String 對(duì)象時(shí),并非在一個(gè) String對(duì)象中擴(kuò)增,而是重新創(chuàng)建新的 String 對(duì)象,如 Str5=Str1+Str2+Str3+Str4,這條語(yǔ)句執(zhí)行過(guò)程中會(huì)產(chǎn)生多個(gè)垃圾對(duì)象,因?yàn)閷?duì)次作“+”操作時(shí)都必須創(chuàng)建新的 String 對(duì)象,但這些過(guò)渡對(duì)象對(duì)系統(tǒng)來(lái)說(shuō)是沒(méi)有實(shí)際意義的,只會(huì)增加更多的垃圾。 避免這種情況可以改用 StringBuffer 來(lái)累加字符串,因 StringBuffer是可變長(zhǎng)的,它在原有基礎(chǔ)上進(jìn)行擴(kuò)增,不會(huì)產(chǎn)生中間對(duì)象
(5)分散對(duì)象創(chuàng)建或刪除的時(shí)間
集中在短時(shí)間內(nèi)大量創(chuàng)建新對(duì)象,特別是大對(duì)象,會(huì)導(dǎo)致突然需要大量?jī)?nèi)存,JVM 在面臨這種情況時(shí),只能進(jìn)行主 GC,以回收內(nèi)存或整合內(nèi)存碎片,從而增加主 GC 的頻率。
集中刪除對(duì)象,道理也是一樣的。 它使得突然出現(xiàn)了大量的垃圾對(duì)象,空閑空間必然減少,從而大大增加了下一次創(chuàng)建新對(duì)象時(shí)強(qiáng)制主 GC 的機(jī)會(huì)。
(6) 盡量少用 finalize 函數(shù)
因?yàn)樗鼤?huì)加大 GC 的工作量, 因此盡量少用finalize 方式回收資源。
(7) 使用軟引用類型
如果需要使用經(jīng)常用到的圖片, 可以使用軟引用類型, 它可以盡可能將圖片保存在內(nèi)存中, 供程序調(diào)用, 而不引起 OutOfMemory。
1、設(shè)置環(huán)境變量GOGC=off。
2、運(yùn)行時(shí)調(diào)用debug.SetGCPercent(-1)。GC理解為android中的垃圾回收,常見(jiàn)觸發(fā)垃圾回收是計(jì)數(shù)引用,當(dāng)引用計(jì)數(shù)為0時(shí)會(huì)觸發(fā)垃圾回收。此時(shí)系統(tǒng)并不會(huì)回收內(nèi)存,而是會(huì)當(dāng)作垃圾存放起來(lái),當(dāng)下次需要的時(shí)候,快速使用。關(guān)閉GC系統(tǒng)就會(huì)徹底回收內(nèi)存。
你指的是這個(gè)嗎Gabage Collection?垃圾回收,是.net中對(duì)內(nèi)存管理的一種功能。垃圾回收器跟蹤并回收托管內(nèi)存中分配的對(duì)象,定期執(zhí)行垃圾回收以回收分配給沒(méi)有有效引用的對(duì)象的內(nèi)存。當(dāng)使用可用內(nèi)存不能滿足內(nèi)存請(qǐng)求時(shí),GC會(huì)自動(dòng)進(jìn)行。 在進(jìn)行垃圾回收時(shí),垃圾回收器回首先搜索內(nèi)存中的托管對(duì)象,然后從托管代碼中搜索被引用的對(duì)象并標(biāo)記為有效,接著釋放沒(méi)有被標(biāo)記為有效的對(duì)象并收回內(nèi)存,最后整理內(nèi)存將有效對(duì)象挪動(dòng)到一起。
網(wǎng)站名稱:androidgc,AndroidGc錢包下載
瀏覽地址:http://aaarwkj.com/article16/dssgogg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、網(wǎng)站內(nèi)鏈、ChatGPT、網(wǎng)站營(yíng)銷、網(wǎng)站設(shè)計(jì)、網(wǎng)站制作
聲明:本網(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)