三.垃圾收集器與內存分配策略
1.1 概述
拋出問題
- 哪些內存需要回收
- 什麼時候回收
- 如何回收
1.2 對象已死嗎?
如何判斷對象已經死亡:
1.2.1 引用計數法(RC Reference Counting)
原理:每個對象都有一個引用計數器,每當其他地方引用它時,計數器加一。引用失效時,計數器減一。
當計數器減到0,表示對象不再被引用。
缺點:當兩個對象互相引用時,那麼他們永遠不會被GC回收。
優點:實現簡單,判定效率高,但是主流的JVM中沒有選用RC的算法
1.2.2 可達性分析算法
原理:一系列被稱爲GC Roots的對象作爲起始點,當一個對象沒有任何引用鏈連接GC Roots時,證明此對象不可用。
可以當做GC Roots對象的有:
- 虛擬機棧(棧幀的本地變量表)中引用的對象
- 方法區中類靜態屬性引用的對象
- 方法區中常量引用的對象
- 本地方法棧中JNI(一般指Native方法)引用的對象。
1.2.3 引用