Java8到24新特性整理

本文整理了 Java 8 至 Java 24 各版本的新特性,內容包括每個版本的新增功能分類(如語法增強、性能優化、工具支持等)、詳細的代碼示例,并結合官方文檔資料,分析每項特性的應用場景及優缺點。Java 8 發布于 2014 年,此后 Java 進入快速迭代模式,每半年發布一個新版本。一路走來,Java 8 到 Java 24 帶來了大量重要的新特性。

在這里插入圖片描述

好的,以下是你提供的關于Java 6到Java 24的所有版本特性整理,保持了原內容的完整性和結構:

一覽圖
在這里插入圖片描述

腦圖式內容參考


📅 Java 版本演進概覽

版本發布日期類型主要改進領域
82014 年 3 月LTSLambda、Stream API、默認方法等
92017 年 9 月非 LTS模塊化系統、接口私有方法等
102018 年 3 月非 LTSvar 關鍵字、集合工廠方法等
112018 年 9 月LTSHTTP Client、ZGC 等
122019 年 3 月非 LTSSwitch 表達式(預覽)、Shenandoah GC
132019 年 9 月非 LTS文本塊(Text Blocks)預覽
142020 年 3 月非 LTSRecords、模式匹配(Pattern Matching)
152020 年 9 月非 LTSText Blocks 正式發布、ZGC 轉正
162021 年 3 月非 LTSRecords 正式發布、Vector API 孵化
172021 年 9 月LTSSealed Classes、強封裝內部 API
182022 年 3 月非 LTSUTF-8 默認編碼、jwebserver
192022 年 9 月非 LTSVirtual Threads(預覽)
202023 年 3 月非 LTSStructured Concurrency(孵化)
212023 年 9 月LTSVirtual Threads 正式發布、Sequenced Collections
222024 年 3 月非 LTS多文件源碼運行、構造函數前語句支持
232024 年 9 月非 LTS原始類型模式匹配(預覽)
242025 年 3 月非 LTSKDF API、類加載緩存、Stream Gatherer 正式發布

🔧 語言與語法增強

? Java 8

  • Lambda 表達式:簡化匿名函數書寫。
  • 函數式接口:如 Function, Predicate, Consumer
  • 方法引用Class::method 語法。
  • 默認方法和靜態方法:接口可以定義實現。
  • 重復注解與類型注解:支持多次使用同一注解及在任意類型上標注。

? Java 9-10

  • 私有接口方法:允許接口中定義私有方法。
  • try-with-resources 改進:變量可復用。
  • 局部變量類型推斷(var)var list = new ArrayList<String>();
  • 集合工廠方法List.of("a", "b")

? Java 11+

  • 單文件運行java Hello.java
  • 字符串增強isBlank(), lines(), repeat(int), strip() 等。
  • 文本塊(Text Blocks):多行字符串,""" ... """
  • 記錄類(Record):不可變數據載體,自動生成構造器/equals/hashCode。
  • 密封類(Sealed Class):限制子類繼承。
  • 模式匹配(instanceof 和 switch):自動類型轉換 + 匹配結構。
  • 未命名模式 _:忽略不關心的部分。
  • 字符串模板(STR.):內嵌表達式 ${}

🧠 并發與虛擬線程

? Java 19 (Loom)

  • 虛擬線程(Virtual Threads):輕量級線程,由 JVM 管理。
  • 結構化并發(Structured Concurrency):任務并行管理。
  • 作用域值(ScopedValue):替代 ThreadLocal 的更安全上下文傳遞方式。

? Java 21+

  • 虛擬線程正式發布:可用于生產環境。
  • 非 Pinning 鎖機制:虛擬線程在鎖等待時釋放 OS 線程。

📦 JVM 與性能優化

? 垃圾回收

  • G1 成為默認 GC
  • ZGC:低延遲,跨平臺支持。
  • Shenandoah GC:低延遲垃圾收集器。
  • Gen ZGC(Java 24):分代 ZGC 提升吞吐。

? 內存模型與工具

  • 元空間(Metaspace):取代永久代。
  • Vector API(孵化):SIMD 指令支持。
  • Foreign Function & Memory API(Panama):調用本地函數、訪問內存。
  • 類加載緩存(Java 24):加速應用啟動。

🧪 核心庫增強

? 集合框架

  • Stream API:聲明式編程風格。
  • Optional 類:避免空指針異常。
  • Map 增強computeIfAbsentmerge 等。
  • Sequenced Collections(Java 21):有序集合接口族。

? IO 與網絡

  • Files.readString/writeString:簡化文件操作。
  • HttpClient(Java 11):支持 HTTP/2 和 WebSocket。
  • Socket API 重構:性能與可維護性提升。

? 時間與隨機數

  • 全新的時間 API(java.time):線程安全、不變對象。
  • 偽隨機數生成器(Java 17):多種算法支持。

🛡? 安全與密碼學

  • TLS 1.3 支持(Java 11)
  • EdDSA 加密算法(Java 15)
  • KDF API(Java 24 預覽):統一的密鑰派生接口。
  • SecurityManager 移除(Java 24):徹底禁用安全管理器。

🧰 工具鏈與生態

  • JShell(Java 9):交互式 REPL 工具。
  • jlink(Java 9):構建定制運行時鏡像。
  • jpackage(Java 16):打包原生安裝包。
  • JMH(Java 10):微基準測試框架。
  • Markdown JavaDoc(Java 23):支持 Markdown 編寫文檔注釋。

📚 模塊化與兼容性

  • 模塊化系統(Java 9):Project Jigsaw。
  • 多版本 JAR:支持不同 Java 版本共存。
  • AppCDS 動態歸檔(Java 13):提升啟動性能。
  • 棄用 Nashorn(Java 15):推薦使用 GraalJS。

📈 總結

方向演進成果
語言現代化引入 lambda、record、sealed class、pattern matching 等,代碼更簡潔易讀。
并發模型升級虛擬線程 + 結構化并發,極大提升高并發處理能力。
性能優化新一代 GC(ZGC、Shenandoah)、Vector API、FFM API 等底層性能突破。
標準庫擴展Stream API、Optional、HttpClient、Text Blocks 等增強開發者體驗。
安全性增強TLS 1.3、EdDSA、KDF API 提供現代加密能力。
工具鏈完善JShell、jpackage、jlink、JMH 等工具助力開發調試與部署。

📌 參考文獻

  • OpenJDK 官方 JEP 列表
  • Oracle Blog: Java Language Futures
  • JetBrains IDEA 官方文檔

? 建議閱讀順序

  1. Java 8 → 11:掌握基礎語法、Stream、Optional、HTTP Client。
  2. Java 14 → 17:學習 Record、Sealed Class、Pattern Matching。
  3. Java 19 → 21:了解 Loom 項目(虛擬線程、結構化并發)。
  4. Java 22 → 24:關注流收集器、類文件 API、KDF API 等高級特性。

📌 適合人群

  • 初學者:建議從 Java 8 入門,逐步過渡到 Java 11。
  • 中級開發者:應掌握 Java 14+ 的 record、pattern matching。
  • 高級開發者 / 架構師:需深入理解虛擬線程、FFM API、Vector API 等底層機制。


Java 8 新特性

發行時間:2014 年 3 月

語言特性
  1. Lambda 表達式與函數式接口

    • Java 8 引入了 Lambda 表達式,使我們能夠將匿名函數作為一等公民傳遞和使用。
    • 例如,可以使用 Comparator<String> cmp = (a, b) -> a.length() - b.length(); 來實現字符串長度比較。
    • 這依賴于函數式接口(只含單一抽象方法的接口),如 Comparator 或自定義接口,Lambda 會被推斷成該接口的實現。
    • 有了 Lambda,代碼變得更加簡潔,可讀性提高,尤其適用于集合的過濾、映射等操作。
    // 示例:使用 Lambda 表達式對列表進行過濾和映射
    List<String> names = Arrays.asList("Alice", "Bob", "Ann");
    List<String> filtered = names.stream().filter(s -> s.startsWith("A")).map(s -> s.toUpperCase()).collect(Collectors.toList());
    System.out.println(filtered); // 輸出: [ALICE, ANN]
    
  2. 方法引用

    • 除了 Lambda,Java 8 還支持方法引用,可以用 Class::method 簡潔地引用已有方法或構造器。
    • 例如,names.forEach(System.out::println) 會打印列表中每個元素,相當于對每個元素執行 System.out.println
  3. 接口默認方法和靜態方法

    • 接口現在可以包含帶實現的默認方法(default 方法)和靜態方法。
    • 這使得在不破壞已有實現類的前提下向接口添加新方法成為可能。
    • 默認方法可被實現類繼承或重寫;靜態方法則只能通過接口名調用,不能被子類重寫。
    interface MyInterface {static void staticMethod() {System.out.println("接口靜態方法");}default void defaultMethod() {System.out.println("接口默認方法");}void abstractMethod();
    }class MyClass implements MyInterface {@Overridepublic void abstractMethod() { }// 未重寫 defaultMethod(),將繼承接口的默認實現
    }MyInterface.staticMethod();       // 調用接口靜態方法
    new MyClass().defaultMethod();    // 調用接口默認方法,實現類未重寫則執行接口中的實現
    
    • 應用場景:默認方法解決了接口演化的問題,比如 Java 8 為 Collection 接口添加了 stream() 默認方法,從而所有實現類無需修改就自動擁有流操作能力。靜態方法則方便在接口中組織工具函數。
  4. 重復注解(Repeatable Annotation)

    • 允許在同一聲明或類型上多次應用同一個注解類型。
    • Java 8 引入了 @Repeatable 元注解,通過定義“容器注解”類型來實現重復注解支持。
    • 應用場景如定義多個過濾器、多個權限注解等,使代碼更直觀。
    @Schedule(day="Mon"), @Schedule(day="Tue")
    void scheduledTask() { ... }
    
  5. 類型注解

    • Java 8 擴展了注解使用的場景,注解現在可以加在任何類型使用處(Type Use),如泛型類型參數、強制轉換、實現聲明等。
    • 結合 JSR 308,可用于開發更強的類型檢查工具(如空指針分析)。
核心庫新特性
  1. Stream API

    • Java 8 的 Stream API 為集合批量操作提供了聲明式、鏈式的語法。
    • 開發者可以使用類似 SQL 風格的操作(filter, map, reduce 等)來處理數據流。
    • Stream 的操作分為中間操作(惰性求值)和終止操作(觸發計算)。
    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
    int sum = numbers.stream().filter(n -> n % 2 == 1) // 篩選奇數.mapToInt(n -> n * n)    // 平方映射.sum();                  // 終止操作求和
    System.out.println(sum); // 輸出: 35(1^2 + 3^2 + 5^2)
    
    • 應用場景:Stream API 大大簡化了集合的復雜操作,避免了繁瑣的迭代和臨時集合管理。例如,可以輕松進行過濾、匯總統計、分組分區等操作。
  2. Optional 類

    • 引入了 java.util.Optional<T>,用于優雅地表示“可能為空”的值。
    • Optional 提供了諸如 isPresent(), ifPresent(), orElse() 等方法,可以替代顯式的空檢查,減少空指針異常風險。
    public Optional<User> findUser(String name) {User result = ... // 查找用戶return Optional.ofNullable(result);
    }// 使用Optional避免顯式null判斷
    findUser("Alice").ifPresent(user -> System.out.println(user.getId()));
    User user = findUser("Bob").orElse(new User("Bob")); // 未找到則返回默認User
    
    • 應用場景:Optional 常用于方法返回值,表示“可能沒有結果”。這比返回 null 更具語義,也迫使調用方處理不存在的情況。
  3. 全新的日期時間 API

    • Java 8 推出了 java.time 包(JSR 310),提供了不變且線程安全的日期時間類,包括 LocalDate, LocalTime, LocalDateTime, ZonedDateTime 等,以及用于周期和持續時間的 Period, Duration。
    • 新的 API 改進了舊版 java.util.DateCalendar 的諸多問題,提供了更加自然的時間操作接口。
    LocalDate today = LocalDate.now();
    LocalDate birthday = LocalDate.of(1990, Month.APRIL, 1);
    Period period = Period.between(birthday, today);
    System.out.printf("年齡: %d 年 %d 月 %d 日%n", period.getYears(), period.getMonths(), period.getDays());
    
    • 應用場景:新日期API提供了清晰的方法來操作日期時間,支持時區、夏令時、安全不變。此外還提供了格式化和解析(DateTimeFormatter),大幅簡化日期處理,避免了舊 API 各種不一致和缺陷。
  4. 并發增強(CompletableFuture 等)

    • Java 8 在并發庫方面增加了 CompletableFuture,支持以鏈式回調的方式處理異步結果,實現了Promise模式。
    • 例如可以組合多個異步計算、設置依賴和異常處理。
  5. 其它常用庫改進

    • 例如 Map.computeIfAbsent 等函數式風格的方法,方便地對 Map 執行條件更新;Base64 編碼解碼器(java.util.Base64)也在 Java 8 加入成為標準庫。
JVM 與性能優化
  1. 永久代移除

    • Java 8 移除了 HotSpot VM 的永久代(PermGen),取而代之的是元空間(Metaspace)。
    • 元空間在本地內存中分配且按需增長,大幅減少了因固定永久代空間不足導致的 OutOfMemoryError 情況,提高了內存管理的靈活性。
  2. 垃圾回收優化

    • Java 8 中雖然默認垃圾回收器仍是 Parallel GC,但引入了一些改進。
    • 例如引入串行/并行 Full GC 等優化;此外為 G1 垃圾收集器(實驗性)打下基礎。
  3. HashMap 性能改進

    • 為了應對哈希碰撞,Java 8 改進了 HashMap 和 ConcurrentHashMap 的實現。
    • 當桶中鏈表長度超過閾值時,將鏈表轉換為紅黑樹存儲,從平均 O(n) 查找降為 O(log n)。
工具和其他
  1. Nashorn JavaScript 引擎

    • Java 8 內置了全新的 JavaScript 引擎 Nashorn,替代了原有的 Rhino 引擎。
  2. 增強的注解處理和反射

    • Java 8 對反射和注解處理也有一些改進。

總結

Java 8 是一個里程碑版本,引入的 Lambda 和 Stream 等特性使 Java 正式進入函數式編程時代。默認方法等特性改善了接口演進能力。核心庫的加強和全新時間 API 填補了多年痛點。在性能上,永久代的移除和集合優化提升了穩定性。Java 8 的諸多新功能為之后的 Java 版本奠定了基礎,也是目前許多項目仍在使用的版本。


Java 9 新特性

發行時間:2017 年 9 月

語言和語法增強
  1. 模塊化系統(Project Jigsaw)

    • Java 9 最重要的變化是引入模塊化系統。JDK 本身被重組為約 94 個模塊,允許按需組合所需模塊來構建定制的 Java 運行時(可使用下面提到的 jlink 工具)。
    • 開發者可以通過創建模塊描述符 module-info.java 將應用拆分為模塊。模塊定義了所包含的包以及導出的內容和所需依賴,例如:
    // module-info.java 示例
    module com.example.app {requires com.example.utils;   // 聲明依賴模塊exports com.example.app.api;  // 導出包供其他模塊使用
    }
    
    • 模塊系統解決了 classpath 下包命名沖突和封裝不嚴的問題,實現強封裝。只有模塊導出的包才能被外部訪問,未導出的內部實現包將被嚴格封裝。這樣提高了代碼的可維護性和安全性。

    • 應用場景: 大型應用可以通過模塊劃分更好地管理依賴關系,同時在部署時使用 jlink 剔除無關模塊減小體積。不過模塊化也帶來了學習曲線,且現有項目遷移需要調整訪問限制(可以通過 --add-exports 等選項做兼容)。

  2. 接口私有方法

    • 除了 Java 8 的接口默認方法外,Java 9 支持接口定義私有方法來給多個默認方法復用業務邏輯。這提高了接口內部實現的封裝性,避免默認方法之間代碼重復。私有接口方法只能在接口內部被默認或靜態方法調用,不會暴露給實現類。
  3. try-with-resources 改進

    • try-with-resources 語法在 Java 9 更加方便。現在如果已有實現 AutoCloseable 的資源對象(final或 effectively final),可以直接在 try 語句中使用該變量,而不必再次聲明。
    // Java 8 及之前需要在 try 內新聲明
    try (BufferedReader br = Files.newBufferedReader(path)) { ... }// Java 9 可以在 try 中直接使用已有的變量 br
    BufferedReader br = Files.newBufferedReader(path);
    try (br) {// 使用 br 讀取...
    }
    
    • 這減少了不必要的代碼臃腫,讓語法更簡潔。
核心庫增強
  1. 集合工廠方法

    • Java 9 為集合接口添加了方便創建不可變集合的靜態工廠方法。例如:List.of(1,2,3), Set.of("a","b"), Map.of("key1","val1","key2","val2") 等,可以快捷地創建包含固定元素的集合。這些集合是不可修改的(修改會拋異常)。

    • 應用場景: 用于快速創建常量集合、簡化測試用例數據準備等。

  2. Stream API 改進

    • Java 9 為 Stream 增加了一些實用的新方法,如 takeWhile, dropWhileofNullable 等。其中 takeWhile(predicate) 會從 Stream 開頭起連續獲取滿足條件的元素,直到遇到不滿足條件者停止;dropWhile(predicate) 則丟棄開頭連續滿足條件的元素。

    • 還有 Stream.iterate 支持提供斷言來結束迭代。

    Stream.of(1, 2, 3, 4, 5).takeWhile(n -> n < 4);  // 得到 [1, 2, 3]
    Stream.of(1, 2, 3, 4, 5).dropWhile(n -> n < 4);  // 得到 [4, 5]
    Stream.iterate(1, x -> x + 1).takeWhile(x -> x <= 5).forEach(System.out::println);
    
    • 此外,Optional 也增加了 ifPresentOrElse, or 等方法,提高 Optional 的易用性。這些改進讓流操作和 Optional 更加完備,減少手動處理。
  3. 進程 API

    • 新增 ProcessHandle 接口,提供了更現代的進程管理 API。通過 ProcessHandle.current() 可以獲取當前進程信息,包括 PID 等;還能列出現有進程,觀察進程樹關系,設置監聽等。
    ProcessHandle self = ProcessHandle.current();
    long pid = self.pid();
    self.info().command().ifPresent(cmd -> System.out.println("命令: " + cmd));
    
    • 這在需要監控或管理操作系統進程的應用中非常有用,如實現自定義的進程守護、獲取子進程退出事件等。
  4. 響應式流(Reactive Streams)

    • Java 9 在 java.util.concurrent 下引入了發布-訂閱框架:Flow API,包括 Flow.Publisher, Subscriber, Subscription, Processor 四個接口。這實際上與 Reactive Streams 標準兼容,為反應式編程提供背壓(backpressure)支持。

    • 雖然Java 9沒有提供具體實現,但像 RxJava、Akka Streams 等庫可直接與這套接口集成。應用在需要異步數據流且要考慮消費速率的場景。

  5. HTTP/2 客戶端(孵化)

    • Java 9 引入了一個新的 HTTP 客戶端 API 的孵化版本(位于 jdk.incubator.httpclient 模塊),支持 HTTP/2 和 WebSocket。雖然后來在 Java 11 才正式成為標準 API,這里值得一提。這個新客戶端支持異步非阻塞調用,比舊的 HttpURLConnection 更易用、性能更佳。
JVM 和性能
  1. G1 成為默認 GC

    • Java 9 將 G1 垃圾收集器設置為默認垃圾回收器,取代了之前的 Parallel Scavenge/Parallel Old 組合。G1(Garbage First)是一種低暫停收集器,擅長處理大堆內存,盡量避免了全堆的長時間停頓。

    • 在 Java 9 中,G1 的 Full GC 仍是單線程的,因此極端情況下可能出現長暫停。對此在 Java 10 又做了并行化改進。

    • 應用場景: 對延遲敏感的服務,可從默認使用 G1 中獲益(前提是仔細調優以適應應用負載)。

  2. 字符串存儲優化

    • Java 9 引入了 Compact Strings,即在內部用 byte 數組存儲字符串字符(Latin-1 和 UTF-16 動態選擇),而不再總是用 char 數組。對于只包含 ASCII 的字符串,可節省一半內存。

    • 這個改動對開發者透明,但在字符串處理密集的應用中降低了內存占用,提高了 CPU 緩存利用率。

  3. AOT 編譯(實驗)

    • 新增了 jaotc 工具,允許將 Java 類提前編譯為本地代碼(Ahead-Of-Time)。AOT 編譯器基于 Graal,可生成本地庫,在應用啟動時加載,從而加快啟動速度。

    • 不過這是實驗性功能,實際使用較少,在后續版本中也被移除。場景:需要極致優化啟動時間的場合可以探索,但一般而言 JIT 已經足夠。

  4. VarHandle 和內存柵欄

    • Java 9 提供了 java.lang.invoke.VarHandle 類,作為對 sun.misc.Unsafe 的更安全替代。VarHandle 可以視作特定變量的引用,支持原子操作和內存可見性控制,比如讀取寫入內存柵欄(類似于 C++ 中的 std::atomic)。

    • 這為開發并發框架、實現鎖自由算法提供了標準化的工具。

  5. 多版本 JAR

    • 支持多版本 JAR 文件,即在一個 JAR 中根據不同 Java 版本包含不同的類實現(通過 META-INF/versions 目錄)。運行時將選擇匹配當前 JVM 版本的類,實現庫對新舊版本的兼容發布。

    • 例如,你可以在 JAR 中同時包含 Java 8 的實現和利用 Java 9 特性的實現。這樣第三方庫可以漸進地利用新特性,同時不失對舊版本的支持。

工具與其他
  1. JShell

    • Java 9 帶來了官方的交互式 REPL 工具 JShell。開發者可以在不創建類和 main 方法的情況下,直接輸入 Java 表達式或語句,即時查看執行結果。
    jshell> int x = 5 * 20
    x ==> 100
    jshell> "hello, " + "jshell"
    $2 ==> "hello, jshell"
    
    • JShell 極大地方便了試驗性編程和學習。可以用它快速驗證一段邏輯、探索 API 用法等,降低了寫一個 Hello World 的門檻。對于教學、原型開發非常實用。
  2. jlink

    • Java 9 引入了 jlink 工具,可以根據模塊依賴創建自定義的精簡運行時鏡像。開發者指定應用模塊后,jlink 會打包只包含所需模塊的最小化 JRE。

    • 這對于發布自包含的 Java 應用很有幫助,特別是在容器、物聯網設備上,可減少體積并避免目標環境需要預裝完整 JDK。

  3. JUnit 5 等生態升級

    • 隨著 Java 9 發布,測試框架 JUnit 也升級到 5,支持 Java 8+ 特性如 Lambda 斷言等。這雖不是 JDK 自帶,但與語言新特性配套出現,標志著 Java 生態正擁抱新版本。

總結

Java 9 通過模塊系統對 Java 平臺進行了結構性革新。雖然社區對模塊化褒貶不一,但不可否認它提高了代碼封裝和定制部署能力。除此之外,Java 9 在語法上小幅改進(私有接口方法、鉆石操作符支持匿名類等未提及細節),在 API 和工具上為開發者提供了許多便捷,如 JShell、集合工廠等。它為之后的版本鋪平了道路,標志著 Java 進入了快速發布的新時代。


Java 10 新特性

發行時間:2018 年 3 月

語言特性
  1. 局部變量類型推斷(var)

    • Java 10 最引人注目的特性是引入了新的關鍵字 var,用于局部變量類型推斷。開發者在定義局部變量時,可以用 var 代替具體類型,編譯器會根據初始化表達式自動推斷類型:
    var list = new ArrayList<String>();
    var sum = 0;
    for (var item : list) {// 在循環中,item 的類型也會被推斷
    }
    
    • 在上述代碼中,編譯器會推斷出 list 的類型為 ArrayList<String>sum 的類型為 int。注意:var 不是動態類型或弱類型,Java 類型系統仍是靜態的,只是讓編譯器替我們填寫類型。

    • 應用場景var 可減少樣板代碼,特別是當類型本身冗長(如泛型嵌套)時。

核心庫增強
  1. 不可變集合拷貝

    • 在 Java 9 提供集合工廠方法基礎上,Java 10 為集合增加了 List.copyOf, Set.copyOf, Map.copyOf 靜態方法。這些方法會返回傳入集合的不可變拷貝。
    List<String> src = new ArrayList<>(List.of("a", "b"));
    List<String> copy = List.copyOf(src);
    src.add("c");
    System.out.println(copy); // 輸出 [a, b],copy 不受原列表修改影響
    
    • 應用場景:當需要確保集合不被修改時,可以方便地獲取其不可變版本。
  2. Optional 增強

    • Java 10 為 Optional 新增了 orElseThrow() 方法,它等價于 .orElseThrow(NoSuchElementException::new)。此外還引入了 Optional.or(() -> alternativeOptional) 來在當前 Optional 為空時提供另一個 Optional。
  3. 并行垃圾回收器接口

    • 引入 java.lang.ref.Cleaner 提供替代 finalize() 的清理機制。盡管不直接屬于核心“庫”,但 Java 10 重新整理了垃圾收集器的內部接口,將不同 GC 實現的共性提取出來。
性能和 JVM 改進
  1. G1 并行 Full GC

    • Java 10 通過 JEP 307 實現了 G1 Full GC 并行化。現在當 G1 不得不觸發 Full GC 時,會使用多個線程并行標記清除,減少停頓時間。
  2. 應用類數據共享(AppCDS)

    • Java 10 通過 JEP 310 將 CDS 擴展到應用層面,允許應用類也加入共享歸檔。
  3. 線程局部握手(Thread Local Handshake)

    • Java 10 改進了 JVM 停止線程執行的機制。
  4. 備用內存設備上的堆

    • 允許 JVM 將 Java 堆分配在非主內存設備上(如 NVDIMM 持久內存)。
工具和平臺
  1. 實驗性 Java JIT 編譯器 - Graal

    • Java 10 將基于 Java 實現的 JIT 編譯器 Graal 引入為實驗性選項。
  2. 根證書開源

    • Oracle 將 JDK 內置的 root CA 證書庫開源,替代以前 Oracle JDK 與 OpenJDK 差異的一部分。

總結

雖然 Java 10 屬于非 LTS 的短期版本,但引入的 var 關鍵字極大地簡化了日常編碼。集合、Optional 的小改進也增強了標準庫的便利性。在性能方面,G1 并行 Full GC、AppCDS 都是偏底層卻意義重大的優化,讓 Java 在大內存和大規模部署場景下表現更好。Java 10 還預示了未來的發展方向,如 Graal 編譯器的引入為后續多語言支持鋪路。


Java 11 新特性

發行時間:2018 年 9 月 25 日 (LTS長期支持版)

語言特性
  1. Lambda 參數的局部變量語法

    • Java 11 允許在 Lambda 表達式的參數中使用局部變量語法,即可以用 var 來聲明參數類型。
    Comparator<String> cmp = (var a, var b) -> Integer.compare(a.length(), b.length());
    
    • 這對 Lambda 本身功能沒有變化,但允許我們添加參數注解時更方便。
  2. 直接啟動單文件程序

    • Java 11 可以直接運行單個 Java 源文件,命令如:java Hello.java。Java 編譯器會隱式地先編譯這個源文件再執行。

    • 應用場景:這一特性降低了 Java 的入門門檻和使用 Java 編寫腳本的成本。

核心庫增強
  1. 標準化 HTTP 客戶端

    • Java 11 將新 HTTP 客戶端 API 正式加入標準庫(位于 java.net.http 包)。
    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder(new URI("https://api.github.com")).header("Accept", "application/json").GET().build();
    HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    System.out.println(response.body());
    
    • 應用場景:調用 REST 服務、執行 HTTP 請求等在企業開發中很常見,新 API 提高了開發效率。
  2. 字符串 API 增強

    • Java 11 對 String 添加了若干實用方法:
      • isBlank():判斷字符串是否為空白(空串或只含空白字符)。
      • strip():類似 trim(),但能正確處理 Unicode 空白。
      • repeat(int count):重復當前字符串 count 次,返回新串。
      • lines():將字符串按行拆分為一個流(Stream)。
  3. TLS 1.3 支持

    • 實現了 TLS 1.3 協議,將安全套接字協議升級到最新標準。
性能與內存
  1. ZGC(可伸縮低延遲 GC)

    • Java 11 引入了實驗性的 Z Garbage Collector (ZGC)。
  2. Epsilon GC

    • 另一個實驗性 GC —— Epsilon 也在 Java 11 中提供。
  3. 低開銷 Heap Profiling

    • 引入了一種低開銷的堆采樣機制。
  4. Flight Recorder 開源

    • 商業 JDK 中的 Java Flight Recorder (JFR) 在 Java 11 正式開源納入 OpenJDK。

總結

作為長期支持版本,Java 11 集大成,鞏固了 Java 9 和 10 的變化并提供了一些關鍵的新功能。HttpClient 的正式加入填補了長期以來標準庫缺乏現代 HTTP 客戶端的空白。一系列細小的 API 改進提升了日常開發體驗。ZGC 等革新的 GC 技術雖然仍是實驗性質,但展現了 Java 在大內存低延遲領域的潛力。Java 11 開源了之前商用的 JFR,統一了 Oracle JDK 和 OpenJDK 的差異,這對 Java 生態意義重大。


Java 12 新特性

發行時間:2019 年 3 月

語言特性(預覽)
  1. Switch 表達式(預覽)

    • Java 12 對 switch 進行了增強,推出了 Switch 表達式 作為預覽特性。它允許 switch 直接返回值并使用簡潔的“箭頭語法”或 yield 語句,避免了繁瑣的 break。
    int numDays = switch(day) {case MON, FRI, SUN -> 6;case TUE -> 7;case THU, SAT -> 8;case WED -> 9;default -> { System.out.println("Unknown day: " + day); yield 0;}
    };
    
  2. Instanceof 模式匹配(預覽)

    • Java 12 引入了模式匹配的 instanceof(同為預覽特性)。簡化了在進行類型檢查后再強制轉換的常見模式。
    if (obj instanceof String str) {// 進入此塊則自動完成類型轉換,可直接使用 strSystem.out.println(str.toUpperCase());
    }
    
核心庫增強
  1. String 新方法

    • Java 12 為 String 添加了兩個方便的方法:
      • String.indent(int n):調整字符串每行的縮進。
      • String.transform(Function<String,R> f):將字符串通過給定的函數轉換為另一種對象。
  2. Files.mismatch

    • java.nio.file.Files 中新增了 Files.mismatch(Path, Path) 方法,用于高效比較兩個文件的內容是否相同。
  3. NumberFormat 壓縮數字

    • java.text.NumberFormat 新增了緊湊數字格式(Compact Number Formatting)。
  4. Collector.Teeing

    • Java 12增加了一個很有用的 Collector:Collectors.teeing,可以讓流拆分成兩個子流,各自收集后再合并結果。
JVM 與垃圾回收
  1. Shenandoah GC

    • 由 RedHat 開發的低停頓垃圾收集器 Shenandoah 在 Java 12 正式引入(實驗性)。
  2. G1 優化

    • Java 12 對默認 GC G1 進行了一些改進。
工具和其他
  1. Microbenchmark Harness(試驗)

    • Java 12 引入了一個基于 Java 的微基準測試框架(JEP 230)。
  2. JVM 常量 API

    • 提供了一套新的 java.lang.invoke.ConstantBootstraps API,用于在字節碼中加載動態常量(JEP 309)。

總結

Java 12 屬于過渡版本,但預示了 Java 語言幾個重要演進方向:Switch 表達式和模式匹配都是為了讓 Java 語法更簡潔、更強大。核心庫的小改進(字符串 indent/transform 等)貼近開發者需求,讓日常編碼更高效。Shenandoah GC 等則體現了 Java 在 GC 領域的持續創新,和 ZGC 一起為低延遲場景提供了解決方案。


Java 13 新特性

發行時間:2019 年 9 月

語言特性(預覽)
  1. 文本塊(Text Blocks,預覽)

    • Java 13 引入了文本塊作為預覽特性。文本塊使用三重引號 """ 包圍多行字符串文字,支持保持代碼中的排版格式,大大簡化了多行字符串的書寫。
    String json = """{"name": "Alice","age": 25}
    """;
    
  2. Switch 表達式第二次預覽

    • Java 13 對上一版的 Switch 表達式進行了改進,主要是引入了 yield 關鍵字來返回值而不是使用 break。
    String result = switch(day) {case MON, TUE, WED, THU, FRI: yield "Workday";case SAT, SUN: yield "Weekend";default: yield "Invalid";
    };
    
核心庫與其他
  1. ZGC 改進

    • Java 13 改善了 ZGC,讓其在空閑時能夠將未使用的堆內存歸還操作系統。
  2. Socket API 重構

    • Java 13 底層重寫了傳統 Socket 實現,引入 NioSocketImpl 取代舊的 PlainSocketImpl。
  3. 動態 CDS 歸檔

    • Java 13 延伸了在 Java 10 引入的 AppCDS 功能,加入了動態類數據歸檔能力。

總結

Java 13 延續了預覽新特性的打磨,文本塊讓多行字符串處理在 Java 中首次變得愉悅;Switch 表達式朝著最終定稿又邁進一步。雖然沒有正式定稿的新語法,但這些預覽特性在社區中引起了極大興趣。底層方面,Socket API 的重構和 ZGC 的完善提高了性能和資源利用率。


Java 14 新特性

發行時間:2020 年 3 月

JVM 改進
  1. 空指針異常詳細提示

    • Java 14 對長期困擾開發者的 NullPointerException 進行了改進。當發生 NPE 時,錯誤信息現在會指出具體哪個變量為空。
  2. Switch 表達式正式推出

    • 經過兩個版本的預覽,增強型 switch 在 Java 14 正式成為 Java 語言的一部分。
  3. 記錄類(預覽)

    • Java 14 引入了一種全新的類型聲明:記錄類(Record),作為預覽特性。
    public record Point(int x, int y) { }
    
  4. 文本塊(第二次預覽)

    • 文本塊在 Java 14 繼續預覽,引入了新的轉義。
  5. instanceof 模式匹配(第二次預覽)

    • Java 14 中,instanceof 模式匹配作為預覽再次出現。
核心庫和工具
  1. 移除過時的 CMS GC

    • 并發標記清除(CMS)垃圾收集器自 Java 9 起棄用后,終于在 Java 14 中移除。
  2. ZGC 擴展到 macOS/Windows

    • Java 14 將 ZGC 從僅支持 Linux 擴展到了 macOS 和 Windows 平臺。
  3. jpackage 工具(孵化)

    • 提供了 jpackage 工具的早期版本,可將 Java 應用打包成原生安裝包。

總結

Java 14 是一個內容相當豐富的版本。Switch 表達式終于定型、記錄類和模式匹配開始嶄露頭角。這些語言層面的增強讓 Java 變得更簡潔和富有表達力,逐步擺脫“樣板代碼多”的詬病。


Java 15 新特性

發行時間:2020 年 9 月

核心語言特性
  1. 文本塊正式發布

    • 經過兩次預覽,Text Blocks 在 Java 15 成為正式特性。
  2. 密封類(預覽)

    • Java 15 引入了密封類和密封接口(Sealed Classes)作為預覽特性。
    public sealed class Person permits Employee, Manager { }
    
  3. 隱藏類(Hidden Classes)

    • Java 15 加入了一種專門面向框架、JVM內部使用的類加載功能:隱藏類。
核心庫與安全
  1. 新增 CharSequence.isEmpty()

    • 在 Java 15,CharSequence 接口添加了默認方法 isEmpty()。
  2. 增強 TreeMap

    • Java 15 為 java.util.TreeMap 增補了多個常用方法。
  3. 新的數字簽名算法 EdDSA

    • Java 15 實現了 Edwards-Curve 數字簽名算法(EdDSA)。
JVM 和性能
  1. ZGC 轉正

    • ZGC 在 Java 15 終于結束了實驗狀態,變為生產可用的垃圾收集器。
  2. 棄用 Nashorn

    • Java 15 正式移除了 Nashorn JavaScript 引擎。

總結

Java 15 雖然是短期版本,但特性相當豐富。文本塊在這一版終于塵埃落定,使多行字符串處理不再繁瑣。密封類的引入讓 Java 的類型系統更加強大,配合記錄類、模式匹配,Java 正朝著模式匹配和代數數據類型的方向邁進。


Java 16 新特性

發行時間:2021 年 3 月

語言特性
  1. Records(記錄類)正式發布

    • Java 16 將記錄類從預覽轉為正式特性。
    public record Point(int x, int y) { }
    
  2. 模式匹配的 instanceof 正式發布

    • Java 16 將前幾版預覽的 instanceof 模式匹配特性定型發布。
  3. 密封類第二次預覽

    • Java 16 再次提供了 sealed classes 的預覽。
核心庫增強
  1. Vector API(孵化)

    • Java 16 引入了一個全新的孵化模塊 —— 向量 API。
  2. Foreign Memory Access API(孵化)

    • Java 16 提供了外部內存訪問 API 的第三次孵化。
JDK 內部 API 強封裝
  1. Java 16 開啟了對內部 API 強封裝的最后一步

總結

Java 16 是一個重要的過渡版本。它完成了若干預覽特性的正化(Records, 模式匹配)和 JDK 內部重構,使 Java 語言和平臺更加現代安全。


Java 17 新特性

發行時間:2021 年 9 月 14 日 (LTS長期支持版)

語言特性
  1. 密封類(正式)

    • Sealed Classes 在 Java 17 正式成為語言特性。
  2. Switch 模式匹配(預覽)

    • Java 17 提供了 switch 的模式匹配作為預覽特性。
核心庫增強
  1. 偽隨機數生成器

    • Java 17 通過 JEP 356 引入了一系列新的隨機數生成器接口和實現。
  2. 跨平臺渲染管線

    • 針對 macOS 平臺,JEP 382 引入了基于 Metal 的 Java 2D 渲染管線。
  3. 棄用安全管理器

    • Java 17 將安全管理器標記為棄用。
性能與內部
  1. 永久性強封裝 JDK 內部
    • Java 17 完成了內部 API 封裝的最后工作。

總結

Java 17 是繼 Java 11 之后的又一個長期支持版本,也是“現代 Java”功能集的大成者。密封類、Record、Pattern Matching 這些 Java 近年推出的語法糖在此全部穩固下來。


Java 18 新特性

發行時間:2022 年 3 月

平臺與性能
  1. 默認字符集 UTF-8

    • Java 18 通過 JEP 400 將默認字符集統一為 UTF-8。
  2. 簡單的 Web 服務器

    • JDK 18 內置了一個簡單的純 Java 實現 HTTP 文件服務器。
核心類重構
  1. MethodHandle 實現
    • JEP 416 用 Method Handle 重寫了 Java 核心反射的部分實現。
新特性和 API
  1. 代碼段(Snippet)標簽 for JavaDoc

    • JEP 413 為 JavaDoc 文檔引入了 <pre><code> 風格的代碼片段注釋。
  2. Vector API 第三次孵化

    • Java 18 中 Vector API 進入第 3 輪孵化。
  3. 互聯網地址解析 SPI

    • JEP 418 引入了一個可插拔的名稱解析服務接口。
  4. 外部函數 & 內存 API 第二次孵化

    • Java 18 提供了 Panama 項目 Foreign Function & Memory API 的第二版孵化。
  5. Switch 模式匹配第二次預覽

    • Java 18 的 JEP 420 給出了 switch 模式匹配的第二次預覽。
  6. 棄用終結器 Finalization

    • Java 18 通過 JEP 421 正式將終結器標記為廢棄。
安全與密碼
  1. 默認禁止弱算法
    • Java 18 在安全方面也做了一些更新。

總結

Java 18 新特性相對較少,最大的變化對普通開發者來說莫過于默認編碼 UTF-8 和內置簡易 Web 服務器。Java 18 繼續推進 Panama 和 Vector 等,使 Java 在系統編程和高性能計算上更具競爭力。


Java 19 新特性

發行時間:2022 年 9 月

并發與虛擬線程
  1. 虛擬線程(預覽)

    • Java 19 帶來了備受期待的虛擬線程(Virtual Threads)預覽(JEP 425)。
  2. 結構化并發(孵化)

    • Java 19 還孵化了結構化并發 API(Structured Concurrency,JEP 428)。
語言和模式匹配
  1. 記錄模式(預覽)

    • Java 19 引入 Record Patterns 預覽(JEP 405)。
  2. Switch 模式匹配第三次預覽

    • Java 19 的 switch 模式匹配(JEP 427)進入第 3 輪預覽。
外部接口和內存
  1. 外部函數 & 內存 API(預覽)
    • Java 19 終于進入預覽階段(JEP 424)。
其他改進
  1. 虛擬線程 Pinning 問題優化

    • Java 19 虛擬線程預覽中已經實現了當虛擬線程在 synchronized 塊中等待時,不會阻塞底層 OS 線程。
  2. Linux/RISC-V 移植

    • JEP 422 將 OpenJDK 移植到了 Linux/RISC-V 架構上。

總結

Java 19 是一個亮點頗多的版本。虛擬線程的初次亮相標志著 Java 并發模型迎來巨大變革;結構化并發、記錄模式等則完善了并發和模式匹配的語法。


Java 20 新特性

發行時間:2023 年 3 月

項目 Loom 持續改進
  1. 虛擬線程第二次預覽

    • Java 20 再次提供虛擬線程預覽(JEP 436)。
  2. 結構化并發第二次孵化

    • Java 20 將結構化并發 API (StructuredTaskScope 等) 進行第二輪孵化(JEP 437)。
  3. 作用域值(孵化)

    • Java 20 引入了 Scoped Values(作用域值)孵化特性(JEP 429)。
模式匹配和類型系統
  1. 記錄模式第二次預覽

    • Java 20 延續了 Java 19 的記錄模式預覽(JEP 432)。
  2. Switch 模式匹配第四次預覽

    • Java 20 的 switch 模式匹配(JEP 433)進入第 4 次預覽。
外部接口
  1. 外部函數 & 內存 API 第二次預覽
    • Java 20 將 Java 19 的外部函數/內存 API (Panama) 進行第二次預覽(JEP 434)。

總結

Java 20 在功能上和 Java 19 一脈相承,并無全新重量級特性亮相,但卻將之前的創新推進到了最后階段。


Java 21 新特性

發行時間:2023 年 9 月 19 日 (LTS長期支持版)

語言特性
  1. 字符串模板(預覽)

    • Java 21 引入了字符串模板(String Templates)預覽(JEP 430)。
  2. 記錄模式 & 模式匹配 for switch(正式)

    • Record Patterns 和 Pattern Matching for switch 在經歷多次預覽后,終于在 Java 21 正式發布(JEP 440, 441)。
  3. 未命名模式和變量(正式)

    • Java 21 正式引入了未命名模式() 和未命名變量()(JEP 443)。
  4. 未命名類和實例 main 方法(預覽)

    • Java 21 提供了一個有趣的預覽特性 JEP 445。
并發和虛擬線程
  1. 虛擬線程正式發布

    • Java 21 通過 JEP 444 將虛擬線程 (Virtual Threads) 定稿發布。
  2. Sequenced Collections(序列集合)

    • Java 21 引入了新的集合接口族 Sequenced 集合(JEP 431)。
JVM 和性能
  1. 分代 ZGC(實驗)

    • Java 21 將 ZGC 升級為分代式垃圾收集器(Generational ZGC,JEP 439)。
  2. 禁用安全管理器

    • Java 21 完全禁止在啟動時開啟安全管理器。
  3. 類加載和鏈接緩存(預覽)

    • JEP 483 引入了提前加載和鏈接的機制。

總結

Java 21 是迄今功能最強大的 Java 版本之一。虛擬線程和結構化并發在并發編程領域給予 Java 巨大能量,模式匹配全面落地使 Java 具備了代數數據類型的便利。


Java 22 新特性

發行時間:2024 年 3 月

語言與語法
  1. 未命名模式和變量轉正

    • 前文提到的下劃線 _ 模式和未命名變量在 Java 22 順利成為正式特性。
  2. 外部函數和內存 API 正式發布

    • Java 22 通過 JEP 454 將 Foreign Function & Memory API 正式加入標準庫。
  3. 多文件源代碼程序啟動

    • Java 22 引入了多源文件一起運行的功能(JEP 458)。
  4. 構造函數中允許語句在 super() 之前(預覽)

    • JEP 447 在 Java 22 作為預覽推出了構造方法前置語句功能。
核心庫與安全
  1. 類文件 API 第二次預覽

    • Java 22 繼續預覽類文件 API (JEP 456/466)。
  2. 流收集器 API(預覽)

    • Java 22 引入了流處理的新機制預覽。
總結

Java 22 作為 Java 21 之后的過渡版本,主要工作是鞏固和過渡。大量 Java 21 預覽的特性在 Java 22 得到正式發布,使得 Java 語言和 API 更加完善。


Java 23 新特性

發行時間:2024 年 9 月

語言與語法
  1. 原始類型模式(預覽)

    • Java 23 通過 JEP 455 引入了對原始類型的模式匹配預覽。
  2. 類文件 API 第二次預覽

    • Java 23 繼續預覽類文件 API (JEP 456/466)。
  3. Markdown JavaDoc 正式

    • Java 23 將 JavaDoc 的 Markdown 支持正式化。
總結

Java 23 是在 LTS (21) 之后,下一次 LTS (25) 之前的第二個常規版本。其主要作用是鞏固新功能并繼續探索。


Java 24 新特性

發行時間:2025 年 3 月

安全與密碼學
  1. 密鑰派生函數 API(預覽)

    • Java 24 引入了 KDF (Key Derivation Function) API 預覽(JEP 478)。
  2. 完全禁用 Security Manager

    • Java 24 完全移除了安全管理器的啟用可能。
性能與工具
  1. 類加載與鏈接緩存

    • Java 24 通過 JEP 483 引入了類預加載和鏈接特性。
  2. 類文件 API 正式發布

    • Java 24 正式推出了類文件 API(JEP 484)。
  3. Stream::gather 正式發布

    • Java 24 通過 JEP 485 增強了 Stream API,引入了 Stream.gather(Gatherer) 方法及 Gatherer 接口。
并發與內部改進
  1. 作用域值第四次預覽

    • ScopedValue 在 Java 24 進入第 4 次預覽(JEP 487)。
  2. 虛擬線程同步無 Pinning

    • Java 24 的虛擬線程在鎖中阻塞時會掛起自己,讓出載體線程。

總結

Java 24 作為非 LTS 版本,卻引入了史無前例多的新特性。它將過去幾年的預覽幾乎全部定型,并推出了像 KDF API、Scope Values 等值得期待的新預覽。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/905821.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905821.shtml
英文地址,請注明出處:http://en.pswp.cn/news/905821.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

輪詢仲裁器

參考視頻 https://www.bilibili.com/video/BV1VQ4y1w7Rr/?spm_id_from333.337.search-card.all.click&vd_sourceaedd69dc9740e91cdd85c0dfaf25304b 算法原理

Armijo rule

非精線搜索步長規則Armijo規則&Goldstein規則&Wolfe規則_armijo rule-CSDN博客 [原創]用“人話”解釋不精確線搜索中的Armijo-Goldstein準則及Wolfe-Powell準則 – 編碼無悔 / Intent & Focused

力扣HOT100之二叉樹:102. 二叉樹的層序遍歷

這道題太簡單了&#xff0c;相當于基礎的模板題&#xff0c;但凡涉及到層序遍歷一定會用到隊列來實現&#xff0c;其他的倒沒啥好說的&#xff0c;用兩層while循環來層序遍歷&#xff0c;外層while循環用于控制訪問二叉樹的每一層&#xff0c;而內層while循環則負責收割每一層的…

Ubuntu24.04 安裝 5080顯卡驅動以及cuda

前言 之前使用Ubuntu22.04版本一直報錯,然后換了24.04版本才能正常安裝 一. 配置基礎環境 Linux系統進行環境開發環境配置-CSDN博客 二. 安裝顯卡驅動 1.安裝驅動 按以下步驟來&#xff1a; sudo apt update && sudo apt upgrade -y#下載最新內核并安裝 sudo add…

WAS和Tomcat的對比

一、WAS和Tomcat的對比 WebSphere Application Server (WAS) 和 Apache Tomcat 是兩款常用的 Java 應用服務器&#xff0c;但它們有許多顯著的區別。在企業級應用中&#xff0c;它們扮演不同的角色&#xff0c;各自有其特點和適用場景。以下是它們在多個維度上的詳細對比&…

asp.net IHttpHandler 對分塊傳輸編碼的支持,IIs web服務器后端技術

IHttpHandler&#xff0c;不支持分塊傳輸編碼&#xff08;Chunked Transfer&#xff09;吧&#xff1f; IHttpHandler 對分塊傳輸編碼的支持 實際上&#xff0c;IHttpHandler 完全支持分塊傳輸編碼&#xff08;Chunked Transfer Encoding&#xff09;&#xff0c;但具體行為取…

為什么elasticsearch配置文件JVM配置31G最佳

Elasticsearch的JVM堆內存配置為32GB被視為最佳實踐&#xff0c;主要基于以下綜合技術原理和性能優化考量&#xff1a; 1. ?JVM指針壓縮機制優化內存效率? 當堆內存≤32GB時&#xff0c;JVM啟用?對象指針壓縮&#xff08;Compressed Ordinary Object Pointers, COOP&#…

Systemd基礎

1. 概述 Systemd 是一系列工具的集合&#xff0c;其作用也遠遠不僅是啟動操作系統&#xff0c;它還接管了后臺服務、結束、狀態查詢&#xff0c;以及日志歸檔、設備管理、電源管理、定時任務等許多職責&#xff0c;并支持通過特定事件&#xff08;如插入特定 USB 設備&#xf…

AI預測3D新模型百十個定位預測+膽碼預測+去和尾2025年5月16日第79彈

從今天開始&#xff0c;咱們還是暫時基于舊的模型進行預測&#xff0c;好了&#xff0c;廢話不多說&#xff0c;按照老辦法&#xff0c;重點8-9碼定位&#xff0c;配合三膽下1或下2&#xff0c;殺1-2個和尾&#xff0c;再殺6-8個和值&#xff0c;可以做到100-300注左右。 (1)定…

CentOS高手之路:從進階實戰到企業級優化

一、系統深度優化與性能調優 1. 內核參數調優 通過修改/etc/sysctl.conf文件調整內核參數&#xff0c;可顯著提升服務器性能。例如&#xff1a; net.ipv4.tcp_fin_timeout30&#xff08;快速釋放TCP連接&#xff09; vm.swappiness10&#xff08;減少交換分區使用&#xff0…

Docker 無法拉取鏡像解決辦法

問題 在linux終端中通過 docker pull 命令拉取鏡像&#xff0c;報錯無法拉取鏡像&#xff0c;這是因為 Docker 客戶端無法連接到 Docker 鏡像倉庫&#xff08;Docker Hub&#xff09; 解決方法 1、配置國內可用的 Docker鏡像加速器&#xff0c;這些鏡像加速器用于提高從Docke…

【Linux】序列化與反序列化、會話與進程組、守護進程

一.序列化和反序列化 協議其實就是結構化的數據。但是再網絡通信中&#xff0c;我們不直接發送結構化的數據給對方。我們一般會將結構化的數據序列化成字符串/字節流&#xff0c;然后通過網絡在發送出去。而接收方收到之后&#xff0c;要對收到的字符串/流式數據進行反序列化&…

提權腳本Powerup命令備忘單

1. 獲取與加載 從 GitHub 下載&#xff1a;(New-Object Net.WebClient).DownloadFile("https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Privesc/PowerUp.ps1", "C:\Temp\PowerUp.ps1")本地加載&#xff1a;Import-Module .\Power…

2025年Ai寫PPT工具推薦,這5款Ai工具可以一鍵生成專業PPT

上個月給客戶做產品宣講時&#xff0c;我對著空白 PPT 頁面熬到凌晨一點&#xff0c;光是調整文字排版就改了十幾版&#xff0c;最后還是被吐槽 "內容零散沒重點"。后來同事分享了幾款 ai 寫 PPT 工具&#xff0c;試完發現簡直打開了新世界的大門 —— 不用手動寫大綱…

部署docker上的redis,idea一直顯示Failed to connect to any host resolved for DNS name

參考了https://blog.csdn.net/m0_74216612/article/details/144145127 這篇文章&#xff0c;關閉了centos的防火墻&#xff0c;也修改了redis.conf文件&#xff0c;還是一直顯示Failed to connect to any host resolved for DNS name。最終發現是騰訊云服務器那一層防火墻沒…

QML元素 - OpacityMask

QML 的 OpacityMask 用于通過遮罩元素的 透明度&#xff08;Alpha 通道&#xff09; 裁剪源元素的可見區域&#xff0c;適用于創建不規則形狀的 UI 元素&#xff08;如圓形頭像、波浪形進度條&#xff09;或復雜視覺效果。以下是詳細使用技巧和常見場景示例&#xff1a; 1. 基本…

麒麟桌面系統文件保險箱快捷訪問指南:讓重要文件夾一鍵直達桌面!

往期文章鏈接&#xff1a;統信操作系統自定義快捷鍵配置音量調節功能指南 Hello&#xff0c;大家好啊&#xff0c;今天給大家帶來一篇麒麟桌面操作系統上配置文件保險箱內文件夾桌面快捷方式的文章&#xff0c;歡迎大家分享點贊&#xff0c;點個在看和關注吧&#xff01;在日常…

LLM筆記(三)位置編碼(1)

位置編碼理論與應用 1. 位置編碼如何解決置換不變性及其數學表現 在Transformer模型中&#xff0c;自注意力機制&#xff08;Self-Attention&#xff09;具有置換不變性&#xff08;permutation invariance&#xff09;&#xff0c;這意味著對輸入序列的詞元&#xff08;toke…

在人臉識別項目中ffmpeg有什么作用

在人臉識別項目中&#xff0c;FFmpeg 主要用于處理視頻文件或流媒體數據。盡管 FFmpeg 本身并不是直接用于人臉識別的工具&#xff0c;但它通過其強大的多媒體處理能力&#xff0c;在很多方面間接支持了人臉識別任務的執行。以下是 FFmpeg 在人臉識別項目中的幾個主要作用&…

問題 | 國內外軟件定義衛星最新進展研究

軟件定義衛星 **一、國內進展****二、國際進展****三、未來發展方向****總結** 軟件定義衛星&#xff08;Software-Defined Satellite, SDS&#xff09;作為航天領域的重要技術革新方向&#xff0c;近年來在全球范圍內發展迅速。其核心是通過開放式架構和動態軟件配置實現衛星功…