前言
在高并發下,Java程式的GC問題屬于很典型的一類問題,帶來的影響往往會被進一步放大。不管是「GC頻率過快」還是「GC耗時太長」,由于GC期間都存在Stop The World問題,是以很容易導緻服務逾時,引發性能問題。
我們團隊負責的廣告系統承接了比較大的C端流量,平峰期間的請求量基本達到了上千QPS,過去也遇到了很多次GC相關的線上問題。
這篇文章,我再分享一個更棘手的Young GC耗時過長的線上案例,同時會整理下YGC相關的知識點,希望讓你有所收獲。内容分成以下2個部分:
- 從一次YGC耗時過長的案例說起
- YGC的相關知識點總結
初識多線程
- 介紹程序
- 回到線程
- 程序與線程
- 并行與并發
- Javs實作多線程
- Java實作多線程需要注意的細節
Thread線程類API
設定線程名
守護線程
優先級線程
線程生命周期
使用多線程需要注意的問題
- 線程安全問題
- 性能問題
- 安全釋出對象
- 簡述解決線程安全性的辦法
- 原子性和可見性
- 線程封閉
- 不變性
- 線程安全性委托
synchronized鎖和lock鎖
- synchronized鎖
- Lock顯式鎖
- Java鎖簡單總結
AQS
- AQS是什麼?
- 同步狀态
- 先進先出隊列
- sacquire方法
- release方法
ReentrantLock
- 内部類
- 構造方法
- 非公平lock方法
- 公平lock方法
- unlock方法
ReentrantReadWriteLock
- ReentrantReadWriteLock内部類
- 讀鎖和寫鎖的狀态表示
- 寫鎖的擷取
- 讀鎖獲職
線程池
- 線程池簡介
- JDK提供的線程池API
- ForkJoinPool線程池
- Callable和Future
- ThreadPoolExecutor詳解
- execute執行方法
- 線程池關閉
死鎖
- 鎖順序死鎖
- 動态鎖順序死鎖
- 協作對象之間發生死鎖
- 固定鎖順序避免死鎖
- 開放調用避免死鎖
- 使用定時鎖
- 死鎖檢測
線程常用的工具類
- CountDownLatch
- CyclicBarrier
- Semaphore
Atomic
- 基礎鋪墊
- CAS失敗重試(自旋)
- 原子變量類簡單介紹
- LongAdder、AtomicLong性能對比
ThreadLocal
- 什麼是ThreadLocal
- 為什麼要學習ThreadLocal?
- ThreadLocal底層原理總結
- 避免記憶體洩露
線程、資料庫、算法、JVM、分布式、微服務、架構、Spring相關知識
一線網際網路P7面試集錦+各種大廠面試集錦
資料領取方式:戳這裡
學習筆記以及面試真題解析
網際網路P7面試集錦+各種大廠面試集錦
[外鍊圖檔轉存中…(img-e2SxYO2X-1619668245539)]
資料領取方式:戳這裡
學習筆記以及面試真題解析