java web Java真的有引用傳遞嗎?
Java真的有引用傳遞嗎?Java只傳遞值,不傳遞引用。普通數據類型直接傳遞值,而對于引用類型,傳遞值是堆中被引用對象的內存地址。java如何判斷對象是否還“存活”?1. 引用計數算法向對象添加引用計
Java真的有引用傳遞嗎?
Java只傳遞值,不傳遞引用。普通數據類型直接傳遞值,而對于引用類型,傳遞值是堆中被引用對象的內存地址。
java如何判斷對象是否還“存活”?
1. 引用計數算法
向對象添加引用計數器。每當有地方引用對象時,計數器將為+1;當引用失敗時,計數器將為-1;當計數器為0時,對象將不可能再被引用。
優(yōu)點:參考計數算法易于實現,效率高。注:Java虛擬機中沒有引用計數算法來管理內存,主要是因為它不能解決對象之間的相互循環(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(),只要強引用還在,垃圾收集器就永遠不會回收被引用的對象。
②軟引用:用于描述一些有用但不必要的對象。與軟引用關聯(lián)的對象將列在回收范圍中,以便在系統(tǒng)即將耗盡內存之前進行二次回收。如果回收后內存不足,將引發(fā)內存溢出異常。
③弱引用:用于描述不必要的對象。它的強度比軟引用弱。與弱引用關聯(lián)的對象只能生存到下一次垃圾回收。
④虛擬參考:也稱為幻影參考或幻影參考,它是最弱的參考關系。對象是否有虛引用,根本不影響其生成時間,不可能通過虛引用獲得對象實例。