日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何判断对象是否存活之引用计数发

發布時間:2024/4/13 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何判断对象是否存活之引用计数发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
垃圾回收機制是怎么判斷一個對象是否存活的,為什么要講這個呢,這個講完你就明白,新生代是怎么做晉升的,他的存活有幾個方向點,垃圾回收對象是怎么判斷存活的,哪幾種,首先第一種引用計數法,根搜索法,GC roots,引用計數法已經被淘汰掉了,他有一個非常致命的缺點,就是循環依賴的問題,引用計數法的原理,比如我new一個對象的時候,我創建User對象出來了,拿到new User()對象的時候,每個對象有一個年齡,如果小于或者等于15歲的話,它會存放在新生代里面,如果大于15歲,就會存放在老年代里面,比如你創建一個對象的時候,我每次GC會不定時的去回收,如果對象唄繼續使用,被引用,年齡會加1,如果沒有被繼續回收,年齡減1,默認年齡是0歲的,你剛出生的時候是0歲的,如果GC的時候你再被引用,你就加1,如果發現你沒有被繼續使用,那就減1,如果再次GC的時候你又沒有被引用,那就繼續減1,變1歲了,如果再次GC的時候你沒有被使用,那就繼續減1,那就變成0歲了,如果年齡為0歲的話,會被垃圾回收機制認為是不可達對象,會被清理掉,但是這種算法叫引用計數法,給每個對象做一個標記,一旦你被使用的情況下,我就加1歲,沒有被繼續使用的情況下就減1歲,如果是0歲的情況下,我會認為是不可達對象清理掉了,這個就叫引用計數法,引用計數法其實有一個非常大的缺點,因為引用技術法現在沒有被使用掉了不推薦大家使用引用計數法,他有一個循環依賴的問題,什么是循環依賴問題 package com.learn.test;public class ReferenceCountingGC{public Object instance = null;private static final int OneM = 1024 * 1024;private byte[] bigSize = new byte[2 * OneM];public static void testCG(){/*** 這里new了兩個對象A和B* 如果你new了A和B以后*/ReferenceCountingGC objA = new ReferenceCountingGC(); ReferenceCountingGC objB = new ReferenceCountingGC(); /*** B賦給A*/objA.instance = objB;/*** A賦給B* GC回收的時候也不會為0* 就會導致這個對象不會被回收掉* 有一個非常大的缺陷* GC日志的一個分析* GC分析的時候你就會知道一個整體的過程了* 年齡在計數法里也算是一個標記* 引用就加1* 沒有引用就減1* 其實是一個例子* 就是閉環依賴* 你把B給了A,然后A給了B* 如果你再使用循環依賴的情況下* 那么這個時候怎么樣呢* 你再把兩個對象置為空的情況下* 很難知道他到底是被引用掉了* 一個是循環依賴的問題* 循環依賴很難知道這個對象到底有沒有被引用* 很難判斷出來* 所以會產生閉環* 就很難使用引用計數法標記為0* 如果你不把他標記為0的情況下* 這個時候GC就不會被回收掉了* 這是一個比較大的缺陷* 一個對象剛創建的時候* 它會放在EDEN區的時候* 他如果年齡超過15歲的時候* 那這個時候會怎樣呢* 會直接進入到老年代里面去的* 到老年代的時候回收就不是很頻繁了* 就已經非常穩定了* 引用計數法你也可以去了解一下* 引用計數法已經淘汰掉了* 他有一個比較大的缺陷*/objB.instance = objA;/*** 這邊有一個對象* */objA = null;objB = null;System.gc();}}

?

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的如何判断对象是否存活之引用计数发的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。