Bản phát hành Java SE 14

Sau sáu tháng phát triển, Oracle phát hành nền tảng JavaSE 14 (Nền tảng Java, Phiên bản tiêu chuẩn 14), dự án OpenJDK nguồn mở được sử dụng làm triển khai tham chiếu. Java SE 14 duy trì khả năng tương thích ngược với các bản phát hành trước của nền tảng Java; tất cả các dự án Java được viết trước đó sẽ hoạt động mà không có thay đổi khi chạy trong phiên bản mới. Các bản dựng Java SE 14 sẵn sàng cài đặt (JDK, JRE và Server JRE) chuẩn bị dành cho Linux (x86_64), Windows và macOS. Triển khai tham khảo được phát triển bởi dự án OpenJDK Java 14 là nguồn mở hoàn toàn theo giấy phép GPLv2, với các ngoại lệ GNU ClassPath cho phép liên kết động với các sản phẩm thương mại.

Java SE 14 được phân loại là bản phát hành hỗ trợ thường xuyên và sẽ tiếp tục nhận được các bản cập nhật cho đến bản phát hành tiếp theo. Nhánh Hỗ trợ dài hạn (LTS) phải là Java SE 11, nhánh này sẽ tiếp tục nhận được các bản cập nhật cho đến năm 2026. Nhánh LTS trước đây của Java 8 sẽ được hỗ trợ cho đến tháng 2020 năm 2021. Bản phát hành LTS tiếp theo dự kiến ​​​​vào tháng 10 năm XNUMX. Hãy để chúng tôi nhắc bạn rằng bắt đầu từ việc phát hành Java XNUMX, dự án đã chuyển sang một quy trình phát triển mới, ngụ ý rằng chu kỳ hình thành các bản phát hành mới sẽ ngắn hơn. Chức năng mới hiện được phát triển trong một nhánh chính được cập nhật liên tục, bao gồm các thay đổi được thực hiện sẵn và từ đó các nhánh được phân nhánh sáu tháng một lần để ổn định các bản phát hành mới.

Của đổi mới Java 14 ai có thể dấu:

  • Đã thêm hỗ trợ thử nghiệm khớp mẫu trong toán tử “instanceof”, cho phép bạn xác định ngay một biến cục bộ để truy cập giá trị đã kiểm tra. Ví dụ: bạn có thể viết ngay “if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}” mà không cần xác định rõ ràng “String s = (String) obj”.

    Đó là:

    if (nhóm obj instanceof) {
    Nhóm nhóm = (Nhóm)obj;
    var entry = group.getEntries();
    }

    Bây giờ bạn có thể thực hiện mà không cần định nghĩa “Nhóm nhóm = (Nhóm) obj”:

    if (obj instanceof Nhóm nhóm) {
    var entry = group.getEntries();
    }

  • Đã thêm hỗ trợ thử nghiệm cho từ khóa mới "ghi", cung cấp một biểu mẫu nhỏ gọn để xác định các lớp, cho phép bạn tránh việc xác định rõ ràng nhiều phương thức cấp thấp khác nhau như Equals(), hashCode() và toString() trong trường hợp dữ liệu chỉ được lưu trữ trong các trường có hành vi không thay đổi. Khi một lớp sử dụng cách triển khai tiêu chuẩn của các phương thức Equals(), hashCode() và toString(), nó có thể thực hiện mà không cần định nghĩa rõ ràng:

    hồ sơ công khai BankTransaction(LocalDate date,
    số tiền gấp đôi
    Mô tả chuỗi) {}

    Tuyên bố này sẽ tự động thêm việc triển khai các phương thức bằng(), hashCode() và toString() bên cạnh các phương thức khởi tạo và getter.

  • Tiêu chuẩn hóa và hỗ trợ cho một dạng biểu thức “chuyển đổi” mới được bật theo mặc định, không yêu cầu chỉ định toán tử “break”, cho phép bạn kết hợp các nhãn lặp lại và có thể được sử dụng không chỉ ở dạng toán tử mà còn như một sự biểu lộ.

    var log = switch (sự kiện) {
    trường hợp PLAY -> “Người dùng đã kích hoạt nút phát”;
    trường hợp DỪNG, TẠM DỪNG -> “Người dùng cần nghỉ ngơi”;
    mặc định -> {
    Thông báo chuỗi = event.toString();
    LocalDateTime bây giờ = LocalDateTime.now();
    mang lại "Sự kiện không xác định" + tin nhắn +
    » đã đăng nhập » + bây giờ;
    }
    };

  • Hỗ trợ thử nghiệm mở rộng khối văn bản - một dạng chuỗi ký tự mới cho phép bạn đưa dữ liệu văn bản nhiều dòng vào mã nguồn mà không cần sử dụng tính năng thoát ký tự và giữ nguyên định dạng văn bản gốc trong khối. Khối được đóng khung bởi ba dấu ngoặc kép. Trong Java 14, các khối văn bản hiện hỗ trợ chuỗi thoát "\s" để xác định một khoảng trắng và "\" để nối với dòng tiếp theo (bỏ qua dòng mới khi bạn cần in một dòng rất dài). Ví dụ, thay vì mã

    Chuỗi html = " » +
    "\n\t" + " » +
    "\n\t\t" + " \"Java 1 đã có mặt!\" » +
    "\n\t" + " » +
    "\n" + " ";

    bạn có thể chỉ định:

    Chuỗi html = """


    »Java 1\
    ở đây!

    """;

  • Nội dung thông tin chẩn đoán khi xảy ra trường hợp ngoại lệ đã được mở rộng NullPulumException. Trong khi trước đây thông báo lỗi chỉ đề cập đến số dòng thì bây giờ nó nêu chi tiết phương thức nào gây ra ngoại lệ. Chẩn đoán nâng cao hiện chỉ được bật khi khởi chạy với cờ “-XX:+ShowCodeDetailsInExceptionMessages”. Ví dụ: khi chỉ định cờ này, ngoại lệ trong dòng

    tên var = user.getLocation().getCity().getName();

    sẽ dẫn đến một tin nhắn

    Ngoại lệ trong chuỗi "chính" java.lang.NullPointerException: Không thể gọi "Location.getCity()"
    vì giá trị trả về của "User.getLocation()" là null
    tại NullPointerExample.main(NullPointerExample.java:5):5)

    cho bạn biết rằng phương thức Location.getCity() không được gọi và User.getLocation() trả về giá trị rỗng.

  • thực hiện Bản xem trước của tiện ích jpackage, cho phép bạn tạo các gói cho các ứng dụng Java độc lập. Tiện ích này dựa trên javapackager từ JavaFX và cho phép bạn tạo các gói ở định dạng riêng cho nhiều nền tảng khác nhau (msi và exe cho Windows, pkg và dmg cho macOS, deb và vòng/phút cho Linux). Các gói bao gồm tất cả các phụ thuộc cần thiết.
  • Tới bộ thu gom rác G1 thêm một cơ chế phân bổ bộ nhớ mới có tính đến các chi tiết cụ thể khi làm việc trên các hệ thống lớn sử dụng kiến ​​trúc NUMA. Trình cấp phát bộ nhớ mới được bật bằng cờ “+XX:+UseNUMA” và có thể cải thiện đáng kể hiệu suất trên hệ thống NUMA.
  • Thêm API để giám sát nhanh chóng các sự kiện JFR (JDK Flight Recorder), chẳng hạn như để tổ chức giám sát liên tục.
  • Thêm mô-đun jdk.nio.mapmode, cung cấp các chế độ mới (READ_ONLY_SYNC, WRITE_ONLY_SYNC) để tạo bộ đệm byte được ánh xạ (MappedByteBuffer) tham chiếu bộ nhớ không biến đổi (NVM).
  • thực hiện Bản xem trước của API truy cập bộ nhớ ngoài, cho phép các ứng dụng Java truy cập các vùng bộ nhớ bên ngoài vùng nhớ Java một cách an toàn và hiệu quả bằng cách thao tác các phần trừu tượng MemorySegment, MemoryAddress và MemoryLayout mới.
  • Đã công bố các cổng không được dùng nữa cho bộ xử lý Solaris OS và SPARC (Solaris/SPARC, Solaris/x64 và Linux/SPARC) với mục đích loại bỏ các cổng này trong tương lai. Việc ngừng sử dụng các cổng này sẽ cho phép cộng đồng tăng tốc phát triển các tính năng OpenJDK mới mà không lãng phí thời gian duy trì các tính năng dành riêng cho Solaris và SPARC.
  • Đã xóa trình thu gom rác CMS (Concurrent Mark Sweep), được đánh dấu là lỗi thời cách đây hai năm và vẫn chưa được bảo trì (CMS đã được thay thế từ lâu bởi trình thu gom rác G1). Bên cạnh đó, công bố không dùng nữa việc sử dụng kết hợp các thuật toán thu gom rác ParallelScavenge và SerialOld (chạy với các tùy chọn “-XX:+UseParallelGC -XX:-UseParallelOldGC”).
  • Hỗ trợ thử nghiệm cho trình thu gom rác ZGC (Z Garbage Collector) đã được cung cấp trên nền tảng macOS và Windows (trước đây chỉ được hỗ trợ trên Linux). ZGC hoạt động ở chế độ thụ động, giảm thiểu độ trễ do thu gom rác càng nhiều càng tốt (thời gian ngừng hoạt động khi sử dụng ZGC không vượt quá 10 ms.) và có thể hoạt động với cả đống nhỏ và lớn, có kích thước từ vài trăm megabyte đến nhiều terabyte.
  • Loại bỏ Bộ công cụ và API nén file JAR bằng thuật toán Pack200.

Nguồn: opennet.ru

Thêm một lời nhận xét