文章目錄
- 前言
- HotSpot 垃圾收集器
- 1. 查看jdk默認垃圾收集器命令
- 2. 查看當前服務使用的是哪個垃圾收集器:
- 3. 常用的垃圾收集器
- 3.1. 并行垃圾收集器(Parallel Garbage Collector)
- 3.2. CMS 垃圾收集器(Concurrent Mark-Sweep Garbage Collector)
- 3.3. G1 垃圾收集器(Garbage-First Garbage Collector)
前言
??如果您覺得有用的話,記得給博主點個贊,評論,收藏一鍵三連啊,寫作不易啊^ _ ^。
??而且聽說點贊的人每天的運氣都不會太差,實在白嫖的話,那歡迎常來啊!!!
HotSpot 垃圾收集器
HotSpot 虛擬機提供了多種垃圾收集器,每種收集器都有各自的特點,雖然我們要對各個收集器進行比較,但并非為了挑選出一個最好的收集器。我們選擇的只是對具體應用最合適的收集器。
1. 查看jdk默認垃圾收集器命令
java -XX:+PrintCommandLineFlags -version
Java 虛擬機通常會根據運行環境和硬件自動選擇合適的默認垃圾收集器,但也可以通過配置參數來指定使用特定的垃圾收集器.
2. 查看當前服務使用的是哪個垃圾收集器:
jps: 列出當前正在運行的 Java 進程和它們的 PID
jcmd: jcmd 命令可以用來執行各種診斷命令,包括查看 JVM 參數和運行時信息。你可以使用 jcmd 來查看正在運行的 Java 進程使用的垃圾收集器類型。
jcmd <pid> VM.flags
可以看到使用的是G1垃圾收集器。
3. 常用的垃圾收集器
3.1. 并行垃圾收集器(Parallel Garbage Collector)
優點:
- 通過多線程同時進行垃圾收集,提高了垃圾收集的吞吐量,適合處理需要高吞吐量的應用場景。
- 在多核處理器上表現優異,能夠充分利用多核處理器的優勢。
- 適合用于后臺運行的任務,不會對應用的響應時間造成顯著影響。
缺點:
- 由于并行進行垃圾收集,會消耗更多的 CPU 資源,可能導致在一些性能敏感的應用場景中,對響應時間造成不利影響。
- 不夠靈活,無法很好地適應大內存和低延遲要求的場景。
3.2. CMS 垃圾收集器(Concurrent Mark-Sweep Garbage Collector)
優點:
- 通過與應用線程并發執行標記和清除過程,減少了垃圾收集時的停頓時間,適合對響應時間要求較高的應用。
- 對于大部分應用,能夠提供比并行垃圾收集器更低的停頓時間。
缺點:
- 在進行老年代的清理時,可能會出現“并發模式失敗”(Concurrent Mode Failure),需要使用 Serial Old 垃圾收集器進行退化處理,可能導致較長的停頓時間。
- 由于并發執行會占用一定的 CPU 資源,對應用的總吞吐量有一定的影響。
3.3. G1 垃圾收集器(Garbage-First Garbage Collector)
優點:
- 目標是在有限的時間內實現更加可預測的停頓時間,能夠在大堆內存下提供更為穩定的性能。
- 通過劃分堆空間為多個區域(Region),可以根據應用的特征動態調整垃圾收集的策略,有效控制停頓時間。
缺點:
- 由于復雜的區域管理和垃圾收集策略,可能導致一些性能開銷,尤其是在小堆或者低延遲要求的場景中。
- 初始標記和最終標記階段仍然需要暫停應用線程,雖然停頓時間通常短暫,但對于某些特別要求低延遲的應用仍可能不夠理想。