jdk8-21特性
核心特征:
(8)lambda,stream api,optional,方法引用,函數接口,默認方法,新時間Api,函數式接口,并行流,ComletableFuture。
(9)模塊系統,jshell命令工具直接寫java代碼,集合的of方法,接口的private方法,Stream的takeWhile和dropWhile,多版本兼容jar,optional新增ifPresentOfElse(),or(),更強大的
ProcessHandle
獲取進程信息,響應式流。(10)var局部變量類型推斷,不可變集合的增強(CopyOf),Optional.orElseThrow(),并行全垃圾回收器(G1),DK默認包含CA根證書,支持TLS安全通信,?線程本地握手,版本號改為基于發布周期(如
10.0.1
),非之前的1.8.0_291
格式(11)HTTP Client API(正式版),允許在Lambda表達式中使用
var
聲明參數(需顯式注解@NonNull
等),字符串增強方法isBlank()
、lines()
、repeat(),
新的文件讀寫方法(Files類),直接運行.java
文件(無需先編譯),Epsilon垃圾回收器,JVM內部優化,允許嵌套類直接訪問彼此的私有成員,JVM新增CONSTANT_Dynamic
常量池類型,提升動態語言支持,移除Java EE和CORBA模塊(如javax.xml.ws
),原商業版JFR成為開源功能,用于低開銷性能監控。(12-16)簡化
switch
語法,支持返回值和多標簽匹配,Shenandoah GC低停頓時間的垃圾回收器,適合大堆內存應用,Microbenchmark Suite(JMH集成)JDK內置微基準測試工具,簡化多行字符串書寫,避免轉義符String json = """ { "name": "Java", "version": 13 } """;動態CDS歸檔,底層NIO實現優化,提升性能,instanceof模式匹配(預覽)直接類型轉換,減少冗余代碼,Record類(預覽),NullPointerException增強,明確提示NPE發生的具體變量,ZGC(生產就緒)。
(17)record類,密封類,隱藏類,模式匹配,文本塊,swith增強,新ZGC/Shenandoah GC,棄用Applet API,強封裝JDK內部API,偽隨機數生成器(新API),移除實驗性AOT和JIT編譯器,外部函數和內存API(孵化器模塊)
(18-20)默認UTF-8字符集,簡易Web服務器(jwebserver)
(21)虛擬線程,記錄模式,匹配模式再增強,分代ZGC,有序集合,外部函數與內存API,?棄用Windows 32位安裝包,密鑰封裝機制API(KEM)
jvm
內存模型:本地方法棧,pc register,虛擬機棧,堆
作用:
堆:
類加載器的雙親委派機制:
加載流程:
gc
有哪些垃圾回收器:
gc算法:
arthas
內存泄漏定位過程以及使用的命令:
確認泄漏現象 → 定位TOP對象 → 追蹤引用鏈 → 監控增量 → 分析創建路徑 → 生成堆轉儲 → 修復代碼 → 驗證回收
# 查看JVM內存實時狀態(重點關注Old Gen)
dashboard -i 3000 -n 3 | grep -E 'Heap|Old Gen'# 監控GC活動(頻繁Full GC是泄漏標志)
jvm | grep -A 5 'GC'# 統計堆內存中對象數量TOP 10(立即執行)
memory --classloader -t 10# 示例輸出(泄漏對象通常數量異常):
# com.example.CacheEntry ? 1,234,567 ?1.2GB
# java.util.HashMap$Node ? 890,123 ? ?450MB
# 獲取對象實例地址(以com.example.CacheEntry為例) vmtool --action getInstances --className com.example.CacheEntry --limit 1 # 輸出實例地址后,追蹤GC Roots引用路徑 ognl '@com.taobao.arthas.core.advisor.Advice@toGCRoots(<INSTANCE_ADDRESS>)'# 每30秒統計一次泄漏對象的增量(持續觀察)
monitor -c 30 -n 5 'java.lang.Class getInstancesCount "com.example.CacheEntry"'# 動態觀察對象創建堆棧(關鍵!)
stack com.example.CacheManager "addEntry" -n 10# 生成輕量級堆轉儲(建議低峰期執行)
heapdump --live /tmp/leak_snapshot.hprof# 僅dump可疑對象(減少文件大小)
heapdump --include com.example.CacheEntry /tmp/partial_dump.hprof# 檢查對象是否被正確釋放(對比操作前后)
watch com.example.CacheService clearCache '{params,returnObj,throwExp}' -n 5 -x 3# 追蹤對象finalize情況
trace java.lang.Object finalize -n 5
?
- ?臨時緩解?:通過Arthas強制清除泄漏集合(慎用!)
ognl '@com.example.CacheManager@clearAll()'
- ?立即告警?:當Old Gen使用率超過90%時觸發告警
jvm | grep 'Old Gen' | awk '{if($3>90) print "ALERT"}'
cpu過高:
dashboard -i 2000 -n 3
thread -n 5前五個cpu占用最高的完整堆棧 最忙的5個線程的堆棧(推薦)
thread -b看哪里阻塞死鎖堆棧
thread pid查看指定線程的完整堆棧
watch com.example.aa.類名 方法名 '{params,returnObj,throwExp}' -n 5 -x 3通過輸出最近5次方法的調用查看這個方法的參數返回和異常?
trace 類名 方法名 -n 5過輸出最近5次方法調用查看方法得耗時
stack 類名 方法名 -n 5通過輸出最近5次方法的調用棧 查看被哪里調用了
monitor -c 10 -n 5 'java.lang.Class getInstancesCount "com.example.*"'?每10秒統計一次類實例數(持續監控)
jad 類名 反編譯看下代碼是不是沒更新
# 1. 啟動采樣(默認30秒)
profiler start# 2. 停止采樣生成SVG
profiler stop --format svg# 3. 下載文件并用瀏覽器打開
其它場景:
線程
生命周期:
線程池:
java原生包:java.util.concurrent.Executor創建線程池:固定線程數的,單線程的,帶緩存的,周期性執行的,自定義的,jdk7開始有的ForkJoinPool spring封裝:
org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor
org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor
每個參數的意思:
拒絕策略:
CallerRunsPolicy是不是立即調用:
匹配隊列:
ThreadLocal原理:
Volitale原理:
指令重排原理:
鎖
樂觀鎖:
悲觀鎖:
事務
acid:
事務隔離級別:
spring事務原理和流程:
分布式事務原理和流程:
mysql
函數:
索引:
事務:
鎖:
存儲結構:
同步機制:
優化:
redis
數據類型:
緩存擊穿:
緩存穿透:
緩存雪崩:
分布式鎖實現原理:
lua:
redis與mysql的同步機制與原理:
mongodb
存儲格式:
索引:
優化:
原理:
rocketmq / kafka
角色:
消息路由:
順序消費如何保證:
重試隊列機制:
死信隊列機制:
背壓機制:
sharding-jdbc
大數據分庫分表方案:
具體配置:
spring全家桶
如何理解spring:
如何理解springboot:
springboot如何優化啟動速度和內存占用量:
springcloud有哪些組件:
springcloudalibaba有哪些組件:
版本對應問題:
nacos:
openfeign:
setinel:
loadbalance:
seata:
es
歸檔方案:
復雜的查詢語句:
ik分詞器原理:
算法
設計模式
單例:
工廠:
策略:
發布訂閱:
責任鏈:
裝飾器:
適配器模式: