首頁>技術>

一、概念

引用計數法:每個物件上都有有一個計數器,當此物件被引用時加1,取消引用時減一,當計數器等於0,此物件可被回收。

二、缺點

會出現迴圈引用,導致記憶體洩漏。

三、舉例

class ZhangSan {    private LiSi l;    public void setLiSi(LiSi l) {        this.l = l;    }}class LiSi {    private ZhangSan z;    public void setZhangSan(ZhangSan z) {        this.z = z;    }}public static void main(String[] str) {    LiSi l = new LiSi();    ZhangSan z = new ZhangSan();    z.setLiSi(l);    l.setZhangSan(z);}

記憶體分析:

區域性變數l指向堆記憶體的物件LiSi

區域性變數z指向堆記憶體的物件ZhangSan

把LiSi物件的堆記憶體中的地址賦值給堆記憶體中的物件ZhangSan的l屬性

把ZhangSan物件的堆記憶體中的地址賦值給堆記憶體中物件LiSi的z屬性

如圖:

記憶體分析圖

當main方法執行完後,物件LiSi、ZhangSan和l、z的引用關係消失,但由於兩個物件存在迴圈引用,所以計數器不等於0,垃圾收集器無法回收。

7
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 萬花模擬器(C/C++基礎)