## 如何判斷對象是垃圾
### 引用計數算法

* 定義
> 給對象添加一個引用計數器,每當有一個地方引用它時,計數器值就加1;當引用失效時,計數器值就減1;任何時刻計數器值為0的對象就是不可能再被使用的,也就是垃圾。
* 優點:實現簡單,判斷效率高
* 缺點:如果對象間出現循環引用,則無法準確判斷垃圾
### 可達性分析算法

* 定義
> 定義一些`GC Roots`的對象作為起始點,從這些節點向下搜索,搜索所走過的路徑稱為引用鏈。當一個對象到`GC Roots`沒有任何引用鏈相連,則證明此對象時不可用的。
* RC Roots對象
1. 虛擬機棧(棧幀中本地變量表)中引用的對象
2. 本地方法棧中引用的對象
3. 方法區中類靜態屬性引用的對象
4. 方法區中常量引用的對象
Java采用的是可達性分析算法。
## 4大引用

在JDK1.2之后,Java對引用的概念進行了擴充。強軟弱虛,引用強度一次遞減。
## 參考資料
* 周志明 * 《深入理解Java虛擬機》
- 面試突擊
- Java虛擬機
- 認識字節碼
- 000Java發展歷史
- 000Macos10.15.7上編譯OpenJDK8u
- 001熟悉Java內存區域
- 002熟悉HotSpot中的對象
- 003Java如何計算對象大小
- 004垃圾判定算法與4大引用
- 005回收堆和方法區中對象
- 006垃圾收集算法
- 007HotSpot虛擬機垃圾算法實現篇1
- 007HotSpot虛擬機垃圾算法實現篇2
- 007HotSpot虛擬機垃圾算法實現篇3
- 008垃圾收集器
- 009內存分配與回收策略
- 010Java虛擬機相關工具
- 011調優案例分析
- 012一次IDEA的啟動速度調優
- 013類文件Class的結構
- 014熟悉字節碼指令
- 015類加載機制(過程)
- 016類加載器
- IDEA的JVM參數
- Java基礎
- Java自動裝箱與拆箱
- Java基礎數據類型
- Java方法的參數傳遞
- Java并發
- 001走入并行的世界
- 002并行程序基礎
- 003熟悉Java內存模型JMM
- 004Java并發之volatile關鍵字
- 005線程池入門到精通
- 006Java多線程間的同步控制方法
- 007Java維基準測試框架JMH
- 008Java并發容器
- 009Java的線程實現
- 010Java關鍵字synchronized
- 011一些并行模式的熟悉
- 單例模式和不變模式
- 生產者消費者模式
- Future模式
- 012一些并行算法的熟悉
- 面試總結
- 長亮一面