[TOC]
## Minor GC,MajorGC、Full GC
JVM在進行GC時,并非每次都對上面三個內存區域一起回收的,大部分時候回收的都是指新生代。
針對Hotspot VM的實現,它里面的GC按照回收區域又分為兩大種類型:一種是部分收集(Partial GC),一種是整堆收集(FullGC)
* 部分收集:不是完整收集整個Java堆的垃圾收集。其中又分為:
* 新生代收集(Minor GC / Young GC):只是新生代的垃圾收集
* 老年代收集(Major GC / Old GC):只是老年代的圾收集。目前,只有CMSGC會有單獨收集老年代的行為。
* 注意,很多時候Major GC會和Full GC混淆使用,需要具體分辨是老年代回收還是整堆回收。
* 混合收集(MixedGC):收集整個新生代以及部分老年代的垃圾收集。目前,只有G1 GC會有這種行為
* 整堆收集(Full GC):收集整個java堆和方法區的垃圾收集。
## 垃圾回收

### 各種引用的對比
#### 強引用
> 那各種引用在java中是怎么行成的呢?
### 2.4 不可達的對象并非“非死不可”
即使在可達性分析法中不可達的對象,也并非是“非死不可”的,這時候它們暫時處于“緩刑階段”,要真正宣告一個對象死亡,至少要經歷兩次標記過程。
1. 可達性分析法中不可達的對象被第一次標記并且進行一次篩選,篩選的條件是此對象`是否有必要執行 finalize 方法`。當對象沒有覆蓋 finalize 方法,或 finalize 方法已經被虛擬機調用過時,虛擬機將這兩種情況視為沒有必要執行。
2. `被判定為需要執行的對象將會被放在一個隊列中進行第二次標記`,除非這個對象與引用鏈上的任何一個對象建立關聯,否則就會被真的回收。
### 2.6 如何判斷一個類是無用的類
方法區主要回收的是無用的類,那么如何判斷一個類是無用的類的呢?
判定一個常量是否是“廢棄常量”比較簡單,而要判定一個類是否是“無用的類”的條件則相對苛刻許多。類需要同時滿足下面 `3 個條件`才能算是“**無用的類**”:
* 該類所有的`實例`都已經被回收,也就是 Java 堆中不存在該類的任何實例。
* 加載該類的 `ClassLoader` 已經被回收。
* 該類對應的 java.lang.Class `對象沒有在任何地方被引用`,無法在任何地方通過反射訪問該類的方法。
虛擬機可以對滿足上述 3 個條件的無用類進行回收,這里說的僅僅是“可以”,而并不是和對象一樣不使用了就會必然被回收。
## 參考資料
1. [JVM 垃圾回收](https://snailclimb.gitee.io/2019/08/25/java/jvm/JVM%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6/#toc-heading-8)
2. [垃圾回收相關概念](https://www.yuque.com/u21195183/jvm/nwkhey#3c482d26)
- 前言
- 第一部分 計算機網絡與操作系統
- 大量的 TIME_WAIT 狀態 TCP 連接,對業務有什么影響?怎么處理?
- 性能占用
- 第二部分 Java基礎
- 2-1 JVM
- JVM整體結構
- 方法區
- JVM的生命周期
- 堆對象結構
- 垃圾回收
- 調優案例
- 類加載機制
- 執行引擎
- 類文件結構
- 2-2 多線程
- 線程狀態
- 鎖與阻塞
- 悲觀鎖與樂觀鎖
- 阻塞隊列
- ConcurrentHashMap
- 線程池
- 線程框架
- 徹底搞懂AQS
- 2-3 Spring框架基礎
- Spring注解
- Spring IoC 和 AOP 的理解
- Spring工作原理
- 2-4 集合框架
- 死磕HashMap
- 第三部分 高級編程
- Socket與NIO
- 緩沖區
- Bybuffer
- BIO、NIO、AIO
- Netty的工作原理
- Netty高性能原因
- Rabbitmq
- mq消息可靠性是怎么保障的?
- 認證授權
- 第四部分 數據存儲
- 第1章 mysql篇
- MySQL主從一致性
- Mysql的數據組織方式
- Mysql性能優化
- 數據庫中的樂觀鎖與悲觀鎖
- 深度分頁
- 從一條SQL語句看Mysql的工作流程
- 第2章 Redis
- Redis緩存
- redis key過期策略
- 數據持久化
- 基于Redis分布式鎖的實現
- Redis高可用
- 第3章 Elasticsearch
- 全文查詢為什么快
- battle with mysql
- 第五部分 數據結構與算法
- 常見算法題
- 基于數組實現的一個隊列
- 第六部分 真實面試案例
- 初級開發面試材料
- 答案部分
- 現場編碼
- 第七部分 面試官角度
- 第八部分 計算機基礎
- 第九部分 微服務
- OpenFeign工作原理