可**物件的判定方法:引用計數演算法
給物件新增乙個引用計數器,每乙個引用它的地方時,就+1,失效就-1,為0時候就是不能再被用了。
缺陷: 注意迴圈引用,就是你用我的,我用你的,叫做死鎖吧,引用計數器是1,無法**。a.b=b;b.a=a;
現在主流的jvm沒有使用這個演算法。
可達性分析演算法:
通過一系列稱為gc roots的物件作為起始點,從這些結點開始向下搜尋,搜尋走過的路徑稱為引用鏈,當乙個物件到gc roots沒有任何引用鏈相連,圖論證明,乙個點要達到那個點,可是沒有任何路徑可以到達了,這個物件就沒有用了。
虛擬機器棧中的引用的物件。
在方法區中類靜態屬性所引用的變數。
在方法區中常量所引用的變數。
本地方法棧中所引用的物件。
JVM 記憶體管理
date 2020 10 29 16 30 00 updated 2020 10 29 17 10 00 參考文件 jvm記憶體劃分 暫存器 程式計數器pc拿到指令位址,放入指令暫存器ir中,cpu執行指令 本地方法區 方法區棧記憶體 stack 堆記憶體 heap,不是資料結構中的堆 int ar...
jvm記憶體管理(二)
關於物件訪問 object o new object 此語句將會在 堆中 開闢空間儲存 new object 的例項資訊,同時還必須包括物件型別,父類,實現的介面,方法等資訊的位址資訊 這些儲存在方法區中 reference 型別 儲存的是指向物件的引用,具體的實現方式根據jvm的不同,一般有兩種 ...
JVM的記憶體管理
我們知道類中的靜態變數在程式執行期間,其記憶體空間對所有該類的物件例項而言是共享的,為了節省系統記憶體開銷 共享資源,應該將一些變數宣告為靜態變數。通過下面的例子,你就會發現有什麼不同。一 1 public class memorytest 9 1011 data weeks 2021 public...