一爹凹、說明
??筆記主要是記錄一些本人在開發(fā)當(dāng)中的學(xué)習(xí)和使用筆記。筆記內(nèi)容包含一些本人覺得重要的知識點镶殷、本人易犯的錯誤等禾酱。
??由于本人水平有限,其中出現(xiàn)的錯誤或者不合理的地方望各位讀者多多包含绘趋,并指出其中不合理和錯誤的地方颤陶,以便我來修正。謝謝陷遮!
二滓走、筆記時間
??2018年12月24日
三、簡述
??本文主要講述Java編程中變量定義的幾種方式帽馋,包括強引用搅方、弱引用、軟引用绽族、虛引用姨涡。
??本文參考:https://www.cnblogs.com/gudi/p/6403953.html,感謝作者的技術(shù)共享吧慢!
四涛漂、詳情
1 簡介
??我們平常在Java編程中,常常不會特別注意軟件的性能問題检诗,往往在必須優(yōu)化的情況匈仗,我們才會進(jìn)行性能優(yōu)化。
??變量定義是Java編程中最基層的知識逢慌,平常我們都是采用強引用來定義變量锚沸。這篇文章除了介紹我們常用的強引用之外,另外幾種不常用的弱引用涕癣、軟引用、虛引用本文都會一一進(jìn)行說明前标。
2 引用的幾種方式
2.1 強引用(StrongReference)
??我們平常新建的對象都是屬于強引用坠韩,這是一種最常用的變量定義方式。
??優(yōu)劣勢:強引用的優(yōu)勢就是他的劣勢炼列,強引用在無論在什么情況下gc都不會回收它(對象)只搁,直到引用的生命周期結(jié)束(對象不存在引用),才會被gc回收俭尖。但是我們可以通過設(shè)置對象為空(對象不存在引用)來提高gc回收該引用的概率氢惋。
??之所以說他的優(yōu)勢就是他的劣勢洞翩,是根據(jù)使用場景來區(qū)分的。某些場景下變量使用很頻繁焰望,所以我們希望變量一直存在與應(yīng)用內(nèi)存中骚亿,不被gc無故回收,這樣也就不會出現(xiàn)頻繁新建引用導(dǎo)致大量消耗性能的情況熊赖;但是如果變量一直不能被gc回收来屠,這樣就會導(dǎo)致內(nèi)存一直被占用,甚至?xí)?dǎo)致OOM震鹉、內(nèi)存泄漏等問題俱笛。
??使用方式如下方式:
//強引用
String str = "this is StrongReference!"传趾;
Object obj = new Object();
//提高gc回收概率
str = null;
obj = null
2.2 軟引用(SoftReference)
??優(yōu)劣勢:軟引用只有在內(nèi)存不足時迎膜,它(對象)才會被gc回收。也就是說如果內(nèi)存充足浆兰,gc就永遠(yuǎn)不會回收它磕仅。
??軟引用可以和ReferenceQueue聯(lián)合使用,如果軟引用所引用的對象被垃圾回收器回收镊讼,Java虛擬機就會把這個軟引用加入到與之關(guān)聯(lián)的引用隊列(ReferenceQueue)中宽涌。
??使用方式如下方式:
//強引用
String str = new String("abc");
// 軟引用
SoftReference<String> softRef = new SoftReference<String>(str);
//使用,被回收后值為空
String value = softRef.get();
2.3 弱引用(WeakReference)
??優(yōu)劣勢:弱引用只要gc都會被垃圾回收器回收蝶棋。也就是說弱引用的生命周期比軟引用更短卸亮,但垃圾回收器是一個優(yōu)先級很低的線程,因此不一定會很快就會被回收玩裙。
??弱引用可以和ReferenceQueue聯(lián)合使用兼贸,如果弱引用所引用的對象被垃圾回收器回收,Java虛擬機就會把這個弱引用加入到與之關(guān)聯(lián)的引用隊列(ReferenceQueue)中吃溅。
??使用方式如下方式:
//強引用
int str = new String("abc");
// 弱引用
WeakReference<String> weakRef=new WeakReference<String>(str);
//使用溶诞,被回收后值為空
String value = weakRef.get();
2.4 虛引用(PhantomReference)
??優(yōu)劣勢:“虛引用和沒有任何引用一樣,在任何時候都可能被垃圾回收器回收决侈。虛引用并不會決定對象的生命周期螺垢。
??虛引用主要用來跟蹤對象被垃圾回收器回收的活動。虛引用必須和ReferenceQueue聯(lián)合使用赖歌。垃圾回收器會在回收對象之前枉圃,把這個虛引用加入到與之關(guān)聯(lián)的引用隊列(ReferenceQueue)中。
3 總結(jié)
??這四種引用不易被回收的優(yōu)先級為:強引用 > 軟引用 > 弱引用 > 虛引用庐冯。也就是說優(yōu)先級越高越難被gc回收孽亲,優(yōu)先級越低越易被gc回收。其中軟引用和弱引用最常在緩存模式中使用展父。