物件被jvm收集的前提是該物件已經被jvm標記為了「死去」的物件。
引用計數法
引用計數法的基本概念是:給物件新增乙個引用計數器,每當有乙個地方引用了該物件,計數器就加1;當引用失效,計數器就減1;任何時刻的計數器為0的物件就是不可能在被使用的物件。雖然是乙個實現簡單有效的演算法,但是jvm已經很少使用這種演算法了。
可行性分析演算法
現在主流的jvm都是採用「可行性分析」的演算法來標記「死去」的物件。
演算法的基本思路是通過一些稱為「gc-roots」的物件,從這些節點往下延伸,搜尋所走過的路叫引用鏈,當乙個物件沒有被引用鏈搜尋到,則證明該物件不可用。如下圖object-5\6\7是不可用的:
可用作gc-roots的物件有:
1.方法區的靜態型別引用的物件
2.方法區的常量引用的物件
3.方法棧中引用的物件
4.本地棧中引用的物件
如何判斷Java物件是否存活
該種方法是每乙個物件有乙個引用計數屬性,新增乙個引用時計數加1,引用釋放時計數減1,計數為0時表示沒用引用,則代表該物件可以 這種方法簡單,但是無法解決物件相互迴圈引用的問題。該種方法是從gc roots開始向下搜尋,搜尋所走過的路徑為引用鏈。當乙個物件到gc roots沒用任何引用鏈時,則證明此物...
Java物件存活判定演算法
1 引用計數演算法 給物件新增乙個引用計數器,每當有乙個地方引用它時,計數器值就加1 當引用失效時,計數器值就減1 任何時刻計數器為0的物件就是不可能再被使用的。優點 實現簡單 判定效率也很高 缺點 它很難解決物件之間互相迴圈引用的問題。2 可達性分析演算法 這個演算法的基本思想就是通過一系列的稱為...
判斷物件是否是空物件
object.keys 方法會返回乙個由乙個給定物件的自身可列舉屬性組成的陣列。通過陣列中屬性的個數判斷是否為空物件。const empty object.keys empty length 0 empty.constructor object 而且需要判斷物件的constructor屬性是否等於o...