java web Java真的有引用傳遞嗎?
Java真的有引用傳遞嗎?Java只傳遞值,不傳遞引用。普通數(shù)據(jù)類型直接傳遞值,而對于引用類型,傳遞值是堆中被引用對象的內(nèi)存地址。java如何判斷對象是否還“存活”?1. 引用計數(shù)算法向?qū)ο筇砑右糜?/p>
Java真的有引用傳遞嗎?
Java只傳遞值,不傳遞引用。普通數(shù)據(jù)類型直接傳遞值,而對于引用類型,傳遞值是堆中被引用對象的內(nèi)存地址。
java如何判斷對象是否還“存活”?
1. 引用計數(shù)算法
向?qū)ο筇砑右糜嫈?shù)器。每當有地方引用對象時,計數(shù)器將為+1;當引用失敗時,計數(shù)器將為-1;當計數(shù)器為0時,對象將不可能再被引用。
優(yōu)點:參考計數(shù)算法易于實現(xiàn),效率高。注:Java虛擬機中沒有引用計數(shù)算法來管理內(nèi)存,主要是因為它不能解決對象之間的相互循環(huán)引用問題。
例如:object obj=null;
public void t(){
test T1=new test();
test T2=new test();
T1。目標=T2
T2。目標=T1
}
2。可達性分析算法
基本思想是從這些起點向下搜索被稱為“GC根”的對象,并搜索對象通過的路徑(引用鏈)。如果根沒有被任何引用鏈連接,則對象不可用。如圖所示:
在Java中,可以用作GC根的對象包括:
①虛擬機堆棧中的引用對象。
②方法區(qū)域中靜態(tài)屬性引用的對象
方法區(qū)域中常量引用的對象
本地方法堆棧中JNI引用的對象。
3. 強引用:例如:object obj=new object(),只要強引用還在,垃圾收集器就永遠不會回收被引用的對象。
②軟引用:用于描述一些有用但不必要的對象。與軟引用關(guān)聯(lián)的對象將列在回收范圍中,以便在系統(tǒng)即將耗盡內(nèi)存之前進行二次回收。如果回收后內(nèi)存不足,將引發(fā)內(nèi)存溢出異常。
③弱引用:用于描述不必要的對象。它的強度比軟引用弱。與弱引用關(guān)聯(lián)的對象只能生存到下一次垃圾回收。
④虛擬參考:也稱為幻影參考或幻影參考,它是最弱的參考關(guān)系。對象是否有虛引用,根本不影響其生成時間,不可能通過虛引用獲得對象實例。