1、四種引用是什么?
Java的4種引用分別是:強引用(StrongReference)、軟引用(Soft Reference)、弱引用(Weak Reference)、虛引用(PhantomReference)。這四種引用強度依次逐步減弱。
2、四種引用之間的區別以及使用場景
不同的引用類型,主要體現的是對象不同的可達性(reachable)狀態和對垃圾收集的影響。
強引用就是指在程序代碼之中普遍存在的,類似“Object obj=new Object()”這類的引用,只要強引用還存在,垃圾收集器永遠不會回收掉被引用的對象。
軟引用是用來描述一些還有用但並非必需的對象。 對於軟引用關聯着的對象,在系統將要發生內存溢出異常之前,將會把這些對象列進回收范圍之中進行第二次回收。 如果這次回收還沒有足夠的內存,才會拋出內存溢出異常。 在JDK 1.2之后,提供了SoftReference類來實現軟引用。
應用場景:軟引用通常用來實現內存敏感的緩存,如果還有空閑內存,就可以暫時保留緩存,當內存不足時清理掉,這樣保證使用緩存的同時,不會耗盡內存。
弱引用也是用來描述非必需對象的,但是它的強度比軟引用更弱一些,被弱引用關聯的對象只能生存到下一次垃圾收集發生之前。 當垃圾收集器工作時,無論當前內存是否足夠,都會回收掉只被弱引用關聯的對象。 在JDK 1.2之后,提供了WeakReference類來實現弱引用。
使用場景:同上軟引用。
虛引用也稱為幽靈引用或者幻影引用,它是最弱的一種引用關系。 一個對象是否有虛引用的存在,完全不會對其生存時間構成影響,也無法通過虛引用來取得一個對象實例。 為一個對象設置虛引用關聯的唯一目的就是能在這個對象被收集器回收時收到一個系統通知。 在JDK 1.2之后,提供了PhantomReference類來實現虛引用。
