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