Java中強軟弱虛四種引用
一:引用的目的:
在Java中垃圾回收器的運行是JVM操作的,但是我們仍然可以在一定程度上與垃圾回收器進行交互,其目的在於更好的幫助垃圾回收器管理好應用的內存,避免內存出現OOM這種交互方式就是使用JDK 1.2引入的java.lang.ref包,爲對象指定不同的引用類型。
Object obj = new Object() obj指向的是Object()對象在內存中的地址。可以通過obj可以操控對象一些操作。
一、強引用(StrongReference)
當我們使用 new 這個關鍵字創建對象時創建出來的對象就是強引用(new出來對象爲強引用) 如Object obj = new Object() 這個obj就是一個強引用了,如果一個對象具有強引用。垃圾回收器就不會回收有強引用的對象。如當jvm內存不足時,具備強引用的對象,虛擬機寧可會拋出OutOfMemoryError(內存空間不足),使程序終止,也不會靠垃圾回收器去回收該對象來解決內存。
二、軟引用(SoftReference)
如果一個對象只具有軟引用,那就類似於可有可物的生活用品。如果內存空間足夠,垃圾回收器就不會回收它,如果內存空間不足了,就會回收這些對象的內存。只要垃圾回收器沒有回收它,該對象就可以被程序使用。
軟引用的作用:軟引用可用來實現內存敏感的高速緩存。
軟引用可以和一個引用隊列(ReferenceQueue)聯合使用,如果軟引用所引用的對象被垃圾回收,Java虛擬機就會把這個軟引用加入到與之關聯的引用隊列中。
三、弱引用(WeakReference)
如果一個對象只具有弱引用,那就類似於可有可物的生活用品。弱引用與軟引用的區別在於:只具有弱引用的對象擁有更短暫的生命週期。在垃圾回收器線程掃描它所管轄的內存區域的過程中,一旦發現了只具有弱引用的對象,不管當前內存空間足夠與否,都會回收它的內存。不過,由於垃圾回收器是一個優先級很低的線程, 因此不一定會很快發現那些只具有弱引用的對象。
弱引用可以和一個引用隊列(ReferenceQueue)聯合使用,如果弱引用所引用的對象被垃圾回收,Java虛擬機就會把這個弱引用加入到與之關聯的引用隊列中。