- Oracle chính thức công bố phát hành Java 24 (JDK 24)
- JDK 24 là bản triển khai tham chiếu của Java SE Platform phiên bản 24, được xác định trong JSR 399 của JCP, và được phát hành thông qua quy trình phát hành JDK (JEP 3)
[Tóm tắt theo từng JEP]
-
JEP 404: Generational Shenandoah (thử nghiệm)
- Hỗ trợ thu gom theo thế hệ trong Shenandoah GC để cải thiện hiệu năng
-
JEP 450: Compact Object Headers (thử nghiệm)
- Giảm kích thước header đối tượng trong HotSpot JVM từ 96~128 bit xuống 64 bit
- Kỳ vọng giảm kích thước heap, tăng mật độ triển khai và cải thiện tính cục bộ dữ liệu
-
JEP 472: Prepare to Restrict the Use of JNI
- Thêm cảnh báo khi sử dụng JNI (Java Native Interface)
- Cung cấp cảnh báo nhất quán trong API external function and memory (FFM)
- Cảnh báo nhằm chuẩn bị cho việc hạn chế sử dụng JNI và FFM API trong tương lai
- Có thể bật giao diện một cách chọn lọc trong ứng dụng nếu cần
-
JEP 475: Late Barrier Expansion for G1
- Đơn giản hóa cách triển khai Barrier của bộ gom rác G1
- Điều chỉnh thời điểm mở rộng Barrier từ giai đoạn đầu sang giai đoạn sau trong trình biên dịch JIT C2
-
JEP 478: Key Derivation Function API (preview)
- Giới thiệu API Key Derivation Function (KDF) cung cấp chức năng dẫn xuất khóa mật mã
- Có thể dẫn xuất thêm khóa từ khóa bí mật và các dữ liệu khác
-
JEP 483: Ahead-of-Time Class Loading & Linking
- Cho phép các lớp ứng dụng sẵn sàng sử dụng ngay khi HotSpot JVM khởi động
- Trạng thái đã load và link trong một lần chạy được lưu vào cache để khởi động nhanh hơn ở các lần chạy sau
-
JEP 484: Class-File API
- Cung cấp API tiêu chuẩn để phân tích, tạo và biến đổi file lớp Java
-
JEP 485: Stream Gatherers
- Hỗ trợ các phép toán trung gian tùy chỉnh trong Stream API
- Cho phép biến đổi dữ liệu mà các phép toán trung gian hiện có khó thực hiện
-
JEP 486: Permanently Disable the Security Manager
- Security Manager vốn không phải là cơ chế bảo mật chủ đạo cho mã phía client
- Đã bị vô hiệu hóa như một bước chuẩn bị loại bỏ từ Java 17 (JEP 411)
- API của Security Manager dự kiến sẽ bị loại bỏ hoàn toàn trong các bản phát hành tương lai
-
JEP 487: Scoped Values (preview lần thứ tư)
- Giới thiệu Scoped Values để chia sẻ dữ liệu bất biến với các luồng con trong cùng một luồng
- Có thể giảm chi phí bộ nhớ và thời gian so với biến cục bộ theo luồng
- Kỳ vọng cải thiện hiệu năng khi dùng cùng virtual threads và structured concurrency
-
JEP 488: Primitive Types in Patterns, instanceof, and switch (preview lần thứ hai)
- Hỗ trợ kiểu nguyên thủy trong pattern matching
- Có thể dùng mọi kiểu nguyên thủy trong
instanceof và switch
-
JEP 489: Vector API (incubator lần thứ chín)
- Giới thiệu API cho các phép toán vector
- Được biên dịch thành lệnh vector nên kỳ vọng hiệu năng tốt hơn phép toán vô hướng
-
JEP 490: ZGC: Remove the Non-Generational Mode
- Loại bỏ chế độ không theo thế hệ của ZGC và đặt chế độ theo thế hệ làm mặc định
-
JEP 491: Synchronize Virtual Threads without Pinning
- Cải tiến để virtual threads giải phóng platform threads trong câu lệnh
synchronized
- Tránh để virtual threads bị ghim vào platform threads, từ đó cải thiện hiệu năng và khả năng mở rộng
-
JEP 492: Flexible Constructor Bodies (preview lần thứ ba)
- Cho phép có câu lệnh trước lời gọi constructor tường minh (
super(..), this(..))
- Có thể khởi tạo field trước khi instance được khởi tạo hoàn toàn
-
JEP 494: Module Import Declarations (preview lần thứ hai)
- Bổ sung khai báo để import ngắn gọn các package được module export
- Đơn giản hóa việc tái sử dụng thư viện đã module hóa
-
JEP 495: Simple Source Files and Instance Main Methods (preview lần thứ tư)
- Hỗ trợ file mã nguồn và phương thức đơn giản để người mới bắt đầu dễ viết hơn
- Có thể viết chương trình đơn giản mà không cần mã phức tạp
-
JEP 496: Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism
- Giới thiệu Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism (ML-KEM)
- Tăng cường bảo mật khóa đối xứng và chuẩn bị trước các cuộc tấn công từ điện toán lượng tử
-
JEP 497: Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm
- Giới thiệu Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm (ML-DSA)
- Tăng cường khả năng chống giả mạo dữ liệu và xác thực người ký
- Chuẩn bị ứng phó với các cuộc tấn công từ điện toán lượng tử trong tương lai
-
JEP 498: Warn upon Use of Memory-Access Methods in sun.misc.Unsafe
- Cung cấp cảnh báo khi sử dụng các phương thức truy cập bộ nhớ của
sun.misc.Unsafe
- Khuyến nghị chuyển sang VarHandle API và FFM API
-
JEP 499: Structured Concurrency (preview lần thứ tư)
- Giới thiệu structured concurrency để xử lý nhóm tác vụ liên quan như một đơn vị công việc duy nhất
- Đơn giản hóa xử lý lỗi và hủy tác vụ, đồng thời cải thiện độ tin cậy và khả năng quan sát
[Tóm tắt các tính năng mới của JDK 24]
-
Configurable New Session Tickets Count for TLSv1.3
-
Mechanism to Disable TLS Cipher Suites by Pattern Matching
- Có thể vô hiệu hóa các bộ mã TLS thông qua thuộc tính
jdk.tls.disabledAlgorithms trong file cấu hình java.security
- Hỗ trợ pattern matching (có thể dùng wildcard
_)
- Ví dụ:
"TLS_RSA_*" sẽ vô hiệu hóa mọi bộ mã bắt đầu bằng TLS_RSA
-
New Option to Extract a JAR File to a Specific Directory Using the jar Tool
-
New Reader.of(CharSequence) Method
- Bổ sung phương thức factory tĩnh mới
java.io.Reader.of(CharSequence)
- Hỗ trợ đọc hiệu quả từ
String, StringBuilder và các kiểu tương tự
-
New Method Process.waitFor(Duration)
- Bổ sung phương thức
java.lang.Process#waitFor(Duration)
- Tránh sự nhầm lẫn trong việc thiết lập đơn vị thời gian ở
waitFor() hiện tại
-
Support for Unicode 16.0
- Bổ sung hỗ trợ Unicode 16.0
- Thêm tổng cộng 154.998 ký tự và 7 hệ chữ viết mới
- Garay (Tây Phi)
- Gurung Khema, Kirat Rai, Ol Onal, Sunuwar (Ấn Độ và Nepal)
- Todhri (Albania)
- Tulu-Tigalari (tây nam Ấn Độ)
-
New JAR Command Option to Not Overwrite Existing Files
-
New MXBean to Monitor and Manage Virtual Thread Scheduler
- Bổ sung interface
jdk.management.VirtualThreadSchedulerMXBean
- Có thể giám sát trạng thái và mức độ xử lý song song của bộ lập lịch virtual thread
- Có thể thay đổi động mức độ song song mục tiêu của bộ lập lịch
-
New jcmd Commands Thread.vthread_scheduler and Thread.vthread_pollers
- Thêm các lệnh mới vào công cụ
jcmd
Thread.vthread_scheduler: in ra trạng thái bộ lập lịch luồng
Thread.vthread_pollers: in ra trạng thái I/O poller
-
Support for Including Security Properties Files
- File cấu hình
java.security có thể bao gồm các file thuộc tính khác
- Sử dụng
include <đường dẫn file>
- Từ khóa
include không thể được dùng làm tên thuộc tính
-
Document Standard Hash and MGF Algorithms for RSASSA-PSS Signature
- Tài liệu hóa các thuật toán hash tiêu chuẩn và message generation function có thể dùng cho chữ ký RSASSA-PSS
-
SunPKCS11 Provider Is Enhanced to Use CKM_AES_CTS Mechanism
- Bổ sung hỗ trợ biến đổi AES/CTS trong provider SunPKCS11
- Thêm thuộc tính cấu hình mới
cipherTextStealingVariant (CS1, CS2, CS3)
- Với NSS, giá trị mặc định được đặt là CS1
-
New Summary Page for External Specifications
- Thêm trang tóm tắt mới giúp xem nhanh các đặc tả bên ngoài được Java SE và JDK API tham chiếu
-
jpackage Supports WiX Toolset v4 and v5 on Windows
jpackage bổ sung hỗ trợ WiX Toolset v4 và v5
- Tự động chọn phiên bản cài đặt mới nhất
- Tự động chuyển đổi nguồn tùy chỉnh ở định dạng WiX v3 sang định dạng v4
-
Add W3C DTDs and XSDs to the JDK Built-in Catalog
- Thêm DTD và XSD của W3C vào catalog XML tích hợp sẵn của JDK
- Có thể tải cục bộ mà không cần mạng
- Các mục được thêm gồm:
- namespace xml
- XML Schema Part 1 & 2
- XHTML 1.0 & 1.1
- W3C XML specification DTD
4 bình luận
Project Valhalla đã được phát triển trong thời gian rất dài, nên hy vọng sẽ gặt hái được thành quả tốt.
Cá nhân tôi kỳ vọng lớn vào việc cấu trúc phẳng của value class sẽ giảm tham chiếu con trỏ, từ đó mang lại lợi thế về tốc độ truy cập bộ nhớ.
Có vẻ Java đang chịu ảnh hưởng khá nhiều từ Kotlin theo hướng tích cực. Dạo này tôi dùng ngôn ngữ Kotlin và thực sự rất hài lòng, nhưng cũng cổ vũ cho Java, thứ có thể xem là cội nguồn.
Structured Concurrency và Scoped Value là những tính năng tôi rất kỳ vọng.
Ý kiến trên Hacker News
SecurityManager đã l quietly biến mất. Một giáo sư từng dạy môn tự chọn về Java trước đây thường nhấn mạnh ưu điểm của SecurityManager. Khi đó tôi rất hoài nghi, và giờ thấy hài lòng vì sự hoài nghi đó đã được chứng minh là đúng
Tôi muốn chấm dứt giai đoạn preview của structured concurrency. Điều này giúp Java thu hẹp khoảng cách cuối cùng với golang về mức độ dễ dàng trong lập trình đồng thời. Go giúp tạo channel và wait group rất dễ. Structured concurrency dùng những thành phần cơ bản này để giúp viết và hiểu các tác vụ ở mức cao hơn dễ hơn
Việc không còn pinning virtual thread là một ưu điểm lớn. Giờ gần như có thể dùng virtual thread mà không bị hạn chế
Thật tốt khi thấy Streams vẫn được yêu thích. Ở công ty tôi có rất nhiều buổi phỏng vấn kiểu fizzbuzz, và những người chọn Java rồi dùng stream thường sẽ qua. Điều này cho thấy tính công thái học, tính trực quan của ngôn ngữ và sức mạnh của abstraction. Java stream mạnh ngang chuỗi phép toán phong cách hàm của Ruby nhưng hiệu năng thực tế lại tốt
Tính năng mới: Liên kết dự án OpenJDK 24
Bản phát hành ARM32 và Risc-V sẽ sớm có tại đây
Raspberry 2 và Vision Five 2 là phần cứng rất hướng đến tương lai mà Oracle và OpenJDK đang bỏ qua
Câu hỏi về khác biệt giấy phép giữa việc dùng OpenJDK và bản phát hành Oracle JDK chính thức
Thật ngạc nhiên là JEP 491 vẫn chưa được nhắc đến. Nó đảm bảo từ khóa "synchronized" không làm hỏng virtual thread. Đây là lợi ích lớn khi chạy mã hiện có trên virtual thread
Sự tăng trưởng về phiên bản của Java trong vài năm qua khá thú vị. Đi từ Java 9, 10, qua 11 LTS mà vẫn còn đang dùng Java 8. Có quá nhiều việc phải làm
Khi so sánh Java bản mới nhất với Kotlin, Java vẫn đang tiếp tục cải thiện và mang vào các tính năng của Kotlin, nhưng Kotlin cũng đang tự cải thiện theo cách riêng
GraalVM cũng dùng được với Java 24. Có nhiều tính năng hay
Cuối cùng thì pinning đối với virtual thread cũng đã biến mất