JavaRush /Blog Java /Random-VI /Java 11 được phát hành: các tính năng và khả năng mới

Java 11 được phát hành: các tính năng và khả năng mới

Xuất bản trong nhóm
Trước đây, các phiên bản Java mới hiếm khi xuất hiện và có độ trễ. Giờ đây, Oracle đã duy trì thành công nhịp điệu tự thiết lập của mình về “Java mới sáu tháng một lần”. Vì vậy, một vài ngày trước, đúng tiến độ, cuối cùng chúng tôi đã nhận được Java SE 11 và việc triển khai JDK (Bộ công cụ phát triển Java). Java 11 được phát hành: các tính năng và khả năng mới - 1Như mọi khi, phiên bản mới sẽ tương thích với phiên bản cũ và việc hỗ trợ cho Java 11 sẽ kết thúc không sớm hơn tháng 12 năm 2026.

Các tính năng mới trong Java SE 11 (hiển thị cho nhà phát triển)

Hãy nhớ lại rằng trong Java, các thay đổi được thực hiện thông qua việc triển khai “Đề xuất nâng cao JDK” của JEP. JEP là một đề xuất nhằm cải thiện OpenJDK và có thể được phê duyệt, trì hoãn hoặc từ chối. Về bản chất, bộ sưu tập JEP là một chiến lược phát triển cho OpenJDK. Trong dấu ngoặc vuông trước “tính năng” mới, chúng tôi sẽ chỉ ra số lượng JEP tương ứng. [323] Cú pháp biến cục bộ cho tham số Lambda - Cú pháp var cho tham số lambda Java 10 đã giới thiệu từ khóa var, giúp không thể chỉ định rõ ràng loại biến cục bộ. Điều này đơn giản hóa mã. JEP 323 mở rộng việc sử dụng cú pháp này với các biểu thức lambda. Ví dụ đơn giản:
list.stream ()
                 .map ((var s) -> s.toLowerCase ())
                 .collect (Collectors.toList ());
Như Simon Ritter , một nhà truyền bá Java nổi tiếng, đã viết, một lập trình viên Java có kinh nghiệm sẽ lưu ý rằng việc sử dụng var trong trường hợp này có thể là không cần thiết, vì đoạn mã trên có thể được thay thế bằng đoạn mã sau:
list.stream ()
                  .map (s -> s.toLowerCase ())
                  .collect (Collectors.toList ());
Vậy thì tại sao lại hỗ trợ var? Chỉ có một trường hợp đặc biệt - khi bạn muốn thêm chú thích vào tham số lambda. Điều này không thể thực hiện được nếu không có một số loại liên quan và để tránh phải sử dụng một loại rõ ràng, chúng ta có thể đơn giản hóa mọi thứ bằng cách sử dụng var như thế này:
list.stream ()
                 .map ((@ Notnull var s) -> s.toLowerCase ())
                 .collect (Collectors.toList ());
[330] Khởi chạy các chương trình mã nguồn một tệp Tăng cường trình khởi chạy Java để khởi chạy một chương trình dưới dạng một tệp duy nhất với mã nguồn Java Java thường bị chỉ trích vì cú pháp dài dòng và “nghi thức” nhiều bước khởi chạy ngay cả một ứng dụng tầm thường. Đôi khi điều này khiến người mới sợ hãi. Để viết một ứng dụng chỉ in ra " Hello World! " ", bạn cần viết một lớp với voidphương thức public static main và sử dụng System.out.println. Sau khi thực hiện xong việc này, bạn phải biên dịch mã bằng cách sử dụng javac . Cuối cùng, sau đó, bạn có thể khởi chạy ứng dụng, ứng dụng này sẽ hiển thị lời chào xấu số (tất nhiên, môi trường phát triển tích hợp, cả IDEA và môi trường được tích hợp trong JavaRush , sẽ tự thực hiện “ma thuật khởi chạy ứng dụng” này - ghi chú của biên tập viên ). Thành thật mà nói: trong hầu hết các ngôn ngữ lập trình, tập lệnh thực tế để chạy chương trình trông đơn giản hơn nhiều. JEP 330 loại bỏ nhu cầu biên dịch ứng dụng một tệp, vì vậy bây giờ nếu bạn sử dụng dòng lệnh, chỉ cần gõ
java HelloWorld.java
Trình khởi chạy Java sẽ phát hiện tệp chứa mã nguồn Java và biên dịch mã thành tệp lớp trước khi thực thi nó. Bạn có thể đặt tham số sau hoặc trước tên tệp mã nguồn. Những cái được đặt sau tên sẽ được truyền dưới dạng tham số khi ứng dụng được thực thi. Những cái được đặt trước tên sẽ được chuyển dưới dạng tham số cho trình khởi chạy Java sau khi mã được biên dịch. Các tùy chọn dành riêng cho trình biên dịch (chẳng hạn như đường dẫn lớp) cũng sẽ được chuyển tới javac để biên dịch. Ví dụ. Đường kẻ:
java -classpath / home / foo / java Hello.java Bonjour
sẽ tương đương với những dòng này:
javac -classpath / home / foo / java Hello.java
java -classpath / home / foo / java Hello Bonjour
[321] HTTP Client (Standard) - Hỗ trợ HTTP Client API đã được chuẩn hóa.JEP 9 đã giới thiệu một API mới để hỗ trợ giao thức HTTP Client (JEP 110) . Do JDK 9 cũng giới thiệu Hệ thống mô-đun nền tảng Java (JPMS) , nên API này được đưa vào dưới dạng mô-đun ươm tạo (đây là các mô-đun để cung cấp cho các nhà phát triển các API mới chưa trở thành tiêu chuẩn trong Java SE, trong khi các API "trực tiếp" đang được chuẩn bị xóa - nhà phát triển có thể dùng thử API mới và cố gắng cung cấp phản hồi). Sau khi thực hiện các thay đổi cần thiết (API này đã được cập nhật trong JDK 10), API có thể trở thành một phần của tiêu chuẩn. Vì vậy, API máy khách HTTP hiện đã chính thức được đưa vào Java SE 11 . Điều này giới thiệu một mô-đun và gói mới cho JDK, java.net.http . Các loại mới chính là: HttpClient HttpRequest HttpResponse WebSocket API này có thể được sử dụng đồng bộ hoặc không đồng bộ. Ở chế độ không đồng bộ CompletionFuturesvà được sử dụng CompletionStages. [320] Loại bỏ các mô-đun Java EE và CORBA Với việc giới thiệu Hệ thống mô-đun nền tảng Java (JPMS) trong phiên bản thứ chín của Java, người ta có thể chia tệp rt.jar nguyên khối thành nhiều mô-đun. Ngoài ra, JPMS cho phép bạn tạo môi trường thời gian chạy Java chỉ bao gồm các mô-đun cần thiết cho ứng dụng của bạn, giúp giảm đáng kể kích thước của nó. Với các ranh giới mô-đun được xác định rõ ràng, việc loại bỏ các phần lỗi thời của API Java sẽ dễ dàng hơn nhiều - đó là những gì JEP 320 thực hiện. Siêu mô-đun java.se.ee bao gồm sáu mô-đun sẽ không thuộc tiêu chuẩn Java SE 11 và sẽ không được đưa vào trong JDK:
  • corba
  • giao dịch
  • kích hoạt
  • xml.bind
  • xml.ws
  • xml.ws.annotation
Các mô-đun này không được dùng nữa trong JDK 9 và không được đưa vào quá trình biên dịch hoặc thực thi theo mặc định. Điều này có nghĩa là nếu bạn cố gắng biên dịch hoặc chạy một ứng dụng sử dụng API của các mô-đun này trên JDK 9 hoặc JDK 10 thì ứng dụng đó không thành công. Nếu sử dụng API của các mô-đun này trong mã của mình, bạn sẽ cần cung cấp chúng dưới dạng mô-đun hoặc thư viện riêng biệt.

API mới

Một số lượng lớn API mới trong JDK 11 đã xuất hiện nhờ việc đưa các mô-đun HTTP ClientFlight Recorder vào tiêu chuẩn ngôn ngữ . Để biết danh sách đầy đủ các API, hãy xem phần so sánh toàn diện sau đây về các phiên bản khác nhau của JDK do Gunnar Morling biên soạn. Và trong ghi chú này, chúng tôi sẽ liệt kê một số phương thức mới không có trong các mô-đun java.net.http , jdk.jfrjava.security . java.lang.String Có thể cho rằng một trong những thay đổi quan trọng nhất đối với Chuỗi trong API JDK 11, có một số phương thức mới hữu ích.
  • boolean isBlank (): trả về true nếu chuỗi trống hoặc chỉ chứa khoảng trắng, ngược lại là false.

  • Stream lines(): Trả về một dòng các dòng được trích xuất từ ​​chuỗi này, được phân tách bằng dấu kết thúc dòng.

  • String repeat (int): Trả về một chuỗi có giá trị là nối chuỗi đó được lặp lại int lần.

  • String strip (): Trả về một chuỗi đã loại bỏ tất cả khoảng trắng trước hoặc sau ký tự không phải khoảng trắng đầu tiên.

  • String stripLeading (): Trả về một chuỗi đã loại bỏ tất cả các khoảng trắng cho đến ký tự không phải khoảng trắng đầu tiên.

  • String stripTrainling (): Trả về một chuỗi có tất cả các khoảng trắng xuất hiện sau ký tự không phải khoảng trắng cuối cùng bị xóa.
strip()Phương thức này đã thực hiện điều gì đó tương tự trim (), nhưng theo dấu cách, các phương thức này có ý nghĩa khác nhau. Trong trường hợp, trim()chỉ có dấu cách bị cắt và trong strip()- cũng có các ký tự đặc biệt, chẳng hạn như tab. java.lang.StringBuffer java.lang.StringBuilder Cả hai lớp này đều chứa một phương thức mới compareTo ()chấp nhận StringBuffer/ StringBuildervà trả về int. Phương pháp so sánh từ vựng cũng tương tự như phương pháp mới compareTo() CharSequence. java.io.ByteArrayOutputStream
  • void writeBytes (byte []): ghi tất cả byte của tham số vào luồng đầu ra java.io.FileReader
Có hai hàm tạo mới ở đây cho phép bạn chỉ định Charset. java.io.FileWriter Bốn hàm tạo mới cho phép bạn chỉ định Charset. java.io.InputStream
  • io.InputStream nullInputStream (): trả về InputStream, không đọc bất kỳ byte nào. Làm thế nào để sử dụng phương pháp này? Bạn có thể coi nó như một cái gì đó giống như /dev/null để loại bỏ đầu ra mà bạn không cần hoặc để đưa đầu vào luôn trả về 0 byte.
java.io.OutputStream
  • io.OutputStream nullOutputStream ()
java.io.Reader
  • io.Reader nullReader ()
java.io.Writer
  • io.Writer nullWriter ()
java.lang.Character
  • String toString (int): Đây là sự quá tải của một phương thức hiện có nhưng sử dụng int thay vì char.
java.lang.CharSequence
  • int compare (CharSequence, CharSequence): so sánh từ điển hai trường hợp CharSequence. Trả về giá trị âm, 0 hoặc giá trị dương nếu chuỗi đầu tiên tương ứng nhỏ hơn, bằng hoặc lớn hơn chuỗi thứ hai về mặt từ điển.
java.lang.ref.Reference
    lang.Object clone (): Nhà truyền giáo Java Simon Ritter thừa nhận rằng phương pháp này khiến ông bối rối. Lớp này Referencekhông triển khai giao diện Cloneablevà phương thức này sẽ luôn đưa ra một ngoại lệ CloneNotSupportedException. Tuy nhiên, chuyên gia cho rằng phương pháp này sẽ hữu ích cho điều gì đó trong tương lai.
java.lang.Runtime java.lang.System Không có phương pháp mới nào ở đây. Hãy chỉ đề cập rằng phương thức này runFinalizersOnExit ()đã bị xóa khỏi cả hai lớp này, điều này có thể gây ra sự cố tương thích. java.lang.Thread Không có phương pháp bổ sung nào, chúng tôi sẽ chỉ đề cập rằng destroy ()chúng stop (Throwable)đã bị xóa. Tuy nhiên stop (), không cần đối số, vẫn có sẵn. Hãy ghi nhớ điều này vì có thể có vấn đề về tương thích. java.nio.ByteBuffer java.nio.CharBuffer java.nio.DoubleBuffer java.nio.FloatBuffer java.nio.LongBuffer java.nio.ShortBuffer Trong tất cả các lớp này, các nhà phát triển ngôn ngữ đã thêm một phương thức mismatch ()tìm và trả về chỉ mục tương đối của sự không khớp đầu tiên giữa bộ đệm này và bộ đệm nhất định. java.nio.channels.SelectionKey
  • int interestOpsAnd (int)

  • int interestOpsOr (int)
java.nio.channels.Selector
  • int select (java.util.function.Consumer, long): Chọn và thực hiện một hành động trên các phím có kênh tương ứng sẵn sàng cho các thao tác I/O. Tham số dài là thời gian chờ.

  • int select (java.util.function.Consumer): hoạt động giống như phương pháp trên nhưng không có thời gian chờ.

  • int selectNow (java.util.function.Consumer): hoạt động giống như phương pháp trên, chỉ có điều nó không bị chặn.

java.nio.file.Files
  • String readString (Path): Đọc tất cả nội dung từ file thành chuỗi, giải mã byte thành ký tự bằng cách sử dụng mã hóa UTF-8 .

  • String readString (Path, Charset): Hoạt động giống như phương thức trên, nhưng giải mã byte thành ký tự bằng cách sử dụng Charset.

  • Path writeString (Path, CharSequence, java.nio.file. OpenOption []): Nếu bạn viết một chuỗi ký tự CharSequencevào một file thì các ký tự đó sẽ được mã hóa thành byte (sử dụng UTF-8 ).

  • Path writeString (Path, CharSequence, java.nio.file. Charset, OpenOption []): hoạt động giống như phương thức trên, chỉ các ký tự được mã hóa thành byte bằng cách sử dụng Charset.
java.nio.file.Path
  • Path(String, String[]): Trả về Đường dẫn, chuyển đổi một chuỗi đường dẫn hoặc chuỗi các chuỗi mà khi kết hợp lại tạo thành một chuỗi đường dẫn.

  • Đường dẫn (net.URI): Trả về đường dẫn bằng cách chuyển đổi URI.
java.util.Collection
  • Object [] toArray (java.util.function.IntFunction): Trả về một mảng chứa tất cả các phần tử trong bộ sưu tập này, sử dụng hàm tạo được cung cấp để phân phối mảng được trả về.
java.util.concurrent.PriorityBlockingQueue java.util.PriorityQueue
  • void forEach (java.util.function.Consumer): Thực hiện hành động được chỉ định trên mỗi phần tử Iterable cho đến khi tất cả các phần tử đã được xử lý hoặc hành động đó đưa ra một ngoại lệ.

  • boolean removeAll (java.util.Collection): Loại bỏ tất cả các thành phần của bộ sưu tập này cũng có trong bộ sưu tập đã chỉ định (thao tác tùy chọn).

  • boolean removeIf (java.util.function.Predicate): Loại bỏ tất cả các phần tử của bộ sưu tập này thỏa mãn vị từ đã cho.

  • boolean retainAll (java.util.Collection): Chỉ bảo tồn các phần tử trong bộ sưu tập này có trong bộ sưu tập đã chỉ định (thao tác tùy chọn).
java.util.concurrent.TimeUnit
  • long convert (java.time.Duration): Chuyển đổi khoảng thời gian nhất định sang đơn vị này.
java.util.function.Predicate
  • Predicate not(Predicate): trả về một vị từ phủ định của vị từ đã cho.
Ví dụ: đoạn mã sau:
lines.stream ()

.filter (s ->! s.isBlank ())
có thể được chuyển đổi thành này:
lines.stream ()

.filter (Predicate.not (String :: ISBLANK))
và nếu chúng tôi sử dụng tính năng nhập tĩnh thì đây là những gì chúng tôi nhận được:
lines.stream ()
.filter (not(String :: ISBLANK))
java.util.Optional java.util.OptionalInt java.util.OptionalDouble java.util.OptionalLong
  • boolean isEmpty (): Trả về true nếu không có giá trị , ngược lại trả về false .
java.util.regex.Pattern
  • Predicate asMatchPredicate (): Chuyên gia Java Simon Ritter tin rằng có thể có một viên ngọc API JDK 11 thực sự ẩn ở đây. Phương thức này tạo ra một vị từ để kiểm tra xem mẫu này có khớp với một chuỗi đầu vào nhất định hay không.
java.util.zip.Deflater
  • int deflate (ByteBuffer): Nén dữ liệu đầu vào và lấp đầy bộ đệm được chỉ định bằng dữ liệu nén.

  • int deflate (ByteBuffer, int): Nén dữ liệu đầu vào và lấp đầy bộ đệm được chỉ định bằng dữ liệu nén. Trả về lượng dữ liệu nén thực tế.

  • void setDictionary (ByteBuffer): Đặt từ điển đã cho được nén thành byte trong bộ đệm đã cho. Đây là tình trạng quá tải của một phương thức hiện có mà giờ đây có thể chấp nhận a ByteBuffer, thay vì mảng byte.

  • void setInput (ByteBuffer): Đặt nén dữ liệu đầu vào. Nó cũng là sự quá tải của một phương pháp hiện có.
java.util.zip.Inflater
  • int inflate (ByteBuffer): Giải nén byte vào bộ đệm được chỉ định. Trả về số byte không nén thực tế.

  • void setDictionary (ByteBuffer): Đặt từ điển đã cho thành byte trong bộ đệm đã cho. Là một dạng quá tải của một phương thức hiện có.

  • void setInput (ByteBuffer): Đặt dữ liệu đầu vào để giải nén. Một dạng quá tải của một phương thức hiện có.
javax.print.attribute.standard.DialogOwner Đây là một lớp mới trong JDK 11 và là một lớp thuộc tính được sử dụng để hỗ trợ các yêu cầu trang in hoặc tùy chỉnh được hiển thị trên đầu tất cả các cửa sổ hoặc một cửa sổ cụ thể. javax.swing.DefaultComboBoxModel javax.swing.DefaultListModel
  • void addAll (Collection): Thêm tất cả các phần tử có trong bộ sưu tập.

  • void addAll (int, Collection): Thêm tất cả các phần tử có trong bộ sưu tập, bắt đầu từ chỉ mục đã chỉ định.
javax.swing.ListSelectionModel
  • int [] getSelectedIndices (): Trả về một mảng gồm tất cả các chỉ mục đã chọn trong mô hình đã chọn theo thứ tự tăng dần.

  • int getSelectedItemsCount (): Trả về số lượng mục đã chọn.
jdk.jshell.EvalException
  • shell.JShellException getCause (): Trả về lý do có thể đưa ra trong máy khách thực thi do EvalException này trình bày hoặc trả về null nếu lý do không tồn tại hoặc không xác định.

Các tính năng dành cho người không dành cho nhà phát triển của Java 11

[181] Kiểm soát truy cập dựa trên Nest Java và các ngôn ngữ khác hỗ trợ các lớp lồng nhau thông qua các lớp bên trong. Để làm việc này, trình biên dịch phải thực hiện một số thủ thuật nhất định. Ví dụ:
public class Outer {
    private int outerInt;

     class Inner {
       public void printOuterInt() {
         System.out.println("Outer int = " + outerInt);
       }
     }
   }
Trình biên dịch sửa đổi điều này để tạo ra kết quả như sau trước khi biên dịch:
public class Outer {
      private int outerInt;

      public int access$000() {
        return outerInt;
      }

    }


    class Inner$Outer {

      Outer outer;

      public void printOuterInt() {
        System.out.println("Outer int = " + outer.access$000());
      }
    }
Mặc dù về mặt logic, lớp bên trong có cùng mã với lớp bên ngoài, nhưng nó được biên dịch thành một lớp riêng biệt. Do đó, thao tác này yêu cầu một phương thức nối tổng hợp phải được trình biên dịch tạo ra để cung cấp quyền truy cập vào trường riêng của lớp bên ngoài. JEP này giới thiệu khái niệm về tổ, trong đó hai thành viên của cùng một tổ (Trong ví dụ của chúng tôi là Bên ngoài và Bên trong) là bạn bè làm tổ. Hai thuộc tính mới được xác định cho định dạng tệp lớp: NestHostNestMembers . Những thay đổi này hữu ích cho các ngôn ngữ khác hỗ trợ các lớp lồng nhau và mã byte. Hàm này giới thiệu ba phương thức mới cho java.lang.Class : Class getNestHost () Class [] getNestMembers () boolean isNestmateOf (Class) [309] Dynamic Class-File Constants JEP này mô tả một phần mở rộng cho định dạng tệp lớp để hỗ trợ định dạng mới dạng nhóm liên tục CONSTANT_Dynamic. Ý tưởng về hằng số động có vẻ giống như một phép nghịch hợp, nhưng về cơ bản, bạn có thể coi nó như giá trị cuối cùng trong Java 11. Giá trị của hằng số gộp không được đặt tại thời gian biên dịch (không giống như các hằng số khác), mà sử dụng bootstrap phương pháp xác định giá trị tại thời điểm giao hàng. Do đó, giá trị này là động, nhưng vì giá trị của nó chỉ được đặt một lần nên nó cũng không đổi. Tính năng này chủ yếu nhắm đến những người đang phát triển các ngôn ngữ và trình biên dịch mới sẽ tạo mã byte và tệp lớp làm đầu ra để chạy trên JVM. [315] Cải thiện nội tại Aarch64 JEP này được cộng đồng Red Hat đề xuất. Giờ đây JVM có thể sử dụng nhiều hướng dẫn chuyên biệt hơn có sẵn trong tập lệnh Arm 64. Đặc biệt, điều này cải thiện hiệu suất của các phương thức sin ()cos ()lớp java.lang.Math . [318] Epsilon: Bộ thu gom rác không hoạt động Cũng như JEP 315 , bạn có thể cảm ơn Red Hat vì đã giới thiệu bộ thu gom rác Epsilon. Epsilon khác thường ở chỗ nó không thực sự thu gom rác! Khi các đối tượng mới được tạo, nó sẽ phân bổ bộ nhớ nếu cần, nhưng không lấy lại không gian bị chiếm giữ bởi các đối tượng chưa đăng ký. " Vấn đề ở đây là gì? ", - bạn hỏi. Hóa ra việc “thu gom rác” này có hai công dụng: log ()
  1. Trước hết, trình thu gom rác này được thiết kế để đảm bảo rằng các thuật toán GC mới được đánh giá về tác động hiệu suất của chúng. Ý tưởng là chạy một ứng dụng mẫu với Epsilon và tạo một bộ số liệu. Thuật toán thu thập rác mới được bật, các thử nghiệm tương tự được chạy và sau đó kết quả được so sánh.

  2. Đối với các tác vụ rất ngắn (ví dụ như các chức năng không có máy chủ trong đám mây), nơi bạn có thể đảm bảo rằng mình sẽ không vượt quá bộ nhớ được phân bổ cho vùng nhớ heap. Điều này có thể cải thiện hiệu suất bằng cách loại bỏ chi phí chung (bao gồm thu thập số liệu thống kê cần thiết để quyết định có chạy trình thu thập) trong mã ứng dụng hay không. Nếu hết dung lượng heap, JVM có thể bị định cấu hình sai theo một trong ba cách:
    • Bình thường được gọi là OutOfMemoryError.
    • Thực hiện thiết lập lại vùng heap
    • Ổ cứng JVM bị lỗi và có thể đang thực hiện một tác vụ khác (chẳng hạn như khởi động trình gỡ lỗi).
[328]: Máy ghi chuyến bay Máy ghi chuyến bay là một khung thu thập dữ liệu cấp thấp cho JVM. Trước JDK 11, đây là một tính năng thương mại trong hệ nhị phân Oracle JDK. Oracle hiện đang loại bỏ những khác biệt về chức năng giữa Oracle JDK và một bản dựng từ OpenJDK. Đây là những gì Flight Recorder thực hiện :
  • Cung cấp API để tạo và tiêu thụ dữ liệu dưới dạng sự kiện
  • Cung cấp cơ chế đệm và định dạng dữ liệu nhị phân
  • Cho phép tùy chỉnh và lọc các sự kiện
  • Cung cấp sự kiện cho các thư viện OS, JVM HotSpot và JDK
Có hai mô-đun mới ở đây: jdk.jfrjdk.management.jfr . [329] Thuật toán mã hóa ChaCha20 và Poly1305 JEP này nói về việc cập nhật các mật mã được JDK sử dụng. Trường hợp này triển khai thuật toán mã hóa ChaCha20ChaCha20-Poly1305 như được chỉ định trong RFC 7539. ChaCha20 là một mật mã luồng tương đối mới có thể thay thế mật mã RC4 cũ hơn, không an toàn . [333] ZGC: Bộ thu gom rác có độ trễ thấp có thể mở rộng Một bộ thu gom rác có độ trễ thấp có thể mở rộng thử nghiệm. Được thiết kế để sử dụng với các ứng dụng yêu cầu vùng lưu trữ lớn (nhiều gigabyte) và độ trễ thấp. Nó sử dụng một thế hệ heap duy nhất và thực hiện hầu hết (nhưng không phải tất cả) công việc thu gom rác cùng lúc với ứng dụng. [332] Bảo mật lớp vận chuyển (TLS) 1.3 TLS 1.3 (RFC 8446) là một bản vá chính cho giao thức bảo mật lớp vận chuyển TLS cung cấp những cải tiến đáng kể về bảo mật và hiệu suất so với các phiên bản trước. JDK hiện hỗ trợ phiên bản giao thức này. Tài liệu này dựa trên một bài viết của Simon Rittertài liệu chính thức .
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION