Update những thay đổi mới nhất của Java

2176

Năm 2017 là một năm đầy biến động đối với Java. Phiên bản Java 9 đã mang lại nhiều thay đổi và các tính năng mới thú vị cũng như là một lịch trình phát hành hoàn toàn mới cho JDK.

Trong quá khứ, các developer thường phàn nàn rằng Java đã không phát triển đủ nhanh. Thế nhưng với sự thay đổi đến từ Java 9, tôi không nghĩ rằng bạn sẽ nghe thấy những lời than vãn này trong tương lai.

Vào năm 2018, JDK sẽ theo một lịch trình phát hành mới. Thay vì phải chờ đợi từng đợt release lớn mỗi năm một lần, bạn sẽ nhận được các bản cập nhật mỗi sáu tháng một lần. Vì vậy, sau khi Java 9 ra mắt vào tháng 9 năm 2017, Java 10 đã được lên kế hoạch cho tháng 3 năm 2018.

Tổng quan về cộng đồng Java

Hầu hết các project qui mô lớn đều không chỉ sử dụng JDK. Họ cũng dựa vào một chồng các thư viện khác nhau như Spring Boot hoặc Java EE, vốn cũng sẽ nhận được các bản update phát triển mới trong vài tháng tới. Trong bài viết này, tôi sẽ chủ yếu tập trung vào JDK. Nhưng dưới đây là tổng quan nhanh về những gì bạn có thể mong đợi từ hai ông  lớn trong cộng đồng Java.

Nhóm phát triển Spring đang làm việc chăm chỉ cho Spring Boot 2 để kịp lịch phát hành trong năm 2018 với điểm bắt đầu là tháng một. Nhóm phát triển thông báo rằng sẽ không có bất kỳ thay đổi đáng kể nào trong API cũng như hiện chưa có kế hoạch bổ sung bất kỳ tính năng mới nào cho đến khi bản phát hành cuối cùng. Vì vậy, nếu bạn đang sử dụng Spring Boot trong dự án của mình, đã đến lúc hãy xem xét phiên bản mới hơn và lập kế hoạch cập nhật các ứng dụng Spring Boot hiện có của bạn.

Vào cuối năm 2017, Oracle đã bắt đầu bàn giao Java EE cho dự án EE4J do Eclipse Foundation quản lý. Như dự kiến, việc chuyển nhượng một dự án khổng lồ như vậy sẽ không thể hoàn thành sau vài ngày. Có rất nhiều công việc vẫn còn cần phải được thực hiện. Java EE cũng sẽ cần một tên mới cũng như thay đổi quá trình phát triển. Và việc chuyển mã nguồn cũng như mọi thứ liên quan vẫn đang tiếp diễn. Chúng ta sẽ phải chờ đợi thêm một khoảng thời gian trước khi có thể thấy được những ảnh hưởng của quá chuyển giao này.

Lộ trình phát hành và hỗ trợ mới cho JDK

Như đã thông báo vào năm ngoái, Oracle sẽ phát hành hai phiên bản JDK mới vào năm 2018. Thay vì lịch phát hành chậm chạm như trước, hãng sẽ phát hành tính năng nhỏ với lịch mới sáu tháng một lần. Điều này cho phép nhiều đổi mới nhanh hơn cho nền tảng Java. Nó cũng làm giảm các rủi ro liên quan đến bản cập nhật Java. Đối với các developer Java, những bản phát hành nhỏ hơn này cũng giúp chúng ta làm quen với những thay đổi mới nhất và áp dụng chúng cho các dự án dễ dàng hơn.

Tôi hy vọng đây là một thay đổi rất tích cực cho Java. Nó sẽ thêm một động lực mới cho sự phát triển của ngôn ngữ Java và cho phép nhóm JDK thích ứng và đổi mới nhanh hơn rất nhiều.

Những thay đổi và tính năng mới trong JDK 10

Do chu kỳ phát hành ngắn, Java 10 chỉ mang lại một bộ thay đổi nhỏ. Bạn có thể xem tổng quan về 12 JEP hiện tại (Đề xuất nâng cao JDK) trên trang JDK10 của OpenJDK.

Sự thay đổi đáng chú ý nhất có lẽ là sự hỗ trợ cho sự suy luận kiểu của các biến địa phương (JEP 286). Nhưng bạn cũng nên biết về phiên bản phát hành dựa trên thời gian mới (JEP 322), và hỗ trợ GC (bộ thu gom rác) song song được thêm vào G1 hoặc Garbage First (JEP 307).

Type Inference

JDK 10 cuối cùng sẽ mang tới những thay đổi mới với ngôn ngữ Java. Hầu hết các ngôn ngữ khác đã được hỗ trợ tính năng này trong một thời gian và giờ đây thì Java cuối cùng đã có được.

JEP 286 giới thiệu từ khóa var, rút ​​ngắn declaration của một local variable. Nó nói với compiler để suy ra kiểu của variable từ initializer của nó. Vì vậy, thay vì:

Bạn có thể viết như sau:

Như bạn đã thấy trong đoạn mã, từ khóa var loại bỏ sự thừa thải từ khai báo biến. Điều này giúp cho code của bạn dễ đọc hơn, đặc biệt nếu bạn sử dụng các tên biến tốt và nếu đó là một biến mà bạn chỉ sử dụng vài lần trực tiếp sau khi bạn tuyên bố nó.

Nếu bạn muốn tìm hiểu sâu hơn vào JEP 286, tôi khuyên bạn hãy xem bài viết chi tiết của Nicolai Parlog về type inference trong Java 10.

Phiên bản phát hành dựa trên thời gian

Bắt đầu với Java 10, định dạng của số phiên bản Java thay đổi để cải thiện sự hỗ trợ cho một mô hình phát hành dựa trên thời gian.

Thách thức chính được giới thiệu bởi mô hình phát hành mới này là nội dung của một bản phát hành có thể thay đổi. Điều duy nhất được định nghĩa ở phần đầu là thời điểm mà phiên bản mới sẽ được phát hành. Nếu sự phát triển của một tính năng mới mất nhiều thời gian hơn dự kiến, nó sẽ được bỏ ra để không gây ảnh hưởng tới các bản update tiếp theo. Vì vậy, tên của các bản update sẽ được đặt theo thời gian tung ra thay vì là theo những tính năng của nó.

JEP 322 định nghĩa  lại format cho phiên bản là $ FEATURE. $ INTERIM. $ UPDATE. $ PATCH với ý nghĩa như sau:

Mỗi sáu tháng một lần, nhóm phát triển sẽ tung ra một bản phát hành tính năng mới và tăng phần $ FEATURE của số phiên bản.

Bản phát hành được xuất bản vào tháng 3 năm 2018 sẽ được gọi là JDK 10 và phiên bản JDK vào tháng 9 sẽ là 11. Nhóm phát triển tuyên bố trong JEP 223 rằng họ mong đợi sẽ phát hành ít nhất một đến hai tính năng quan trọng trong mỗi bản phát hành.

Số $INTERIM được giữ cho tính linh hoạt và sẽ không được sử dụng trong mô hình phát hành 6 tháng hiện nay vốn đã đang được lên kế hoạch. Vì vậy, bây giờ, nó sẽ luôn luôn là 0.

Các bản cập nhật update sẽ được tung ra lần lượt vào giữa các bản phát hành tính năng và sẽ không bao gồm bất kỳ thay đổi không tương thích nào. Một tháng sau khi phát hành tính năng và sau đó ba tháng một lần, phần UPDATE $ của số phiên bản sẽ được tăng lên.

Parallel Full GC trong G1

Đối với hầu hết các developer, đây là một trong những thay đổi nhỏ hơn. Tùy thuộc vào ứng dụng của bạn, bạn có thể thậm chí không nhận ra nó.

G1 trở thành garbage collector mặc định trong JDK 9. Thiết kế của nó cố gắng tránh Full garbage collector, nhưng điều đó không có nghĩa là chúng sẽ không bao giờ xảy ra. Thật không may, G1 chỉ sử dụng một thuật toán đánh dấu-quét nhỏ gọn để thực hiện một lần đầy đủ. Điều này có thể dẫn đến việc giảm hiệu suất so với parallel collector được sử dụng trước đó.

JEP 307 giải quyết vấn đề này bằng cách cung cấp sự triển khai đa luồng của thuật toán. Bắt đầu với JDK 10, nó sẽ sử dụng cùng một số threads cho các full collections vì nó áp dụng cho các collections nhỏ và hỗn hợp.

Vì vậy, nếu ứng dụng của bạn buộc bộ garbage collector phải thực hiệngarbage collection, JDK 10 có thể giúp cải thiện hiệu suất của nó.

Kế hoạch cho JDK 11

Trong khi JDK 10 thậm chí còn chưa được công bố, thì chỉ còn lại 7 tháng cho đến khi phát hành JDK 11. Vì vậy, không có gì ngạc nhiên khi có một bộ JEP nhỏ đã được lên kế hoạch phát hành lần thứ hai vào năm 2018.

Ngoài việc loại bỏ các mô đun Java EE và CORBA (JEP 320) đã lỗi thời và một garbage collector mới (JEP 318), JDK 11 rất có thể sẽ đưa ra các hằng số tập tin động (dynamic class-file constants) (JEP 309) và hỗ trợ từ khóa var cho các biểu thức lambda (implicitly-typed lambda expressions) (JEP 323).

Phạm vi hiện tại của JDK 11 cho thấy những lợi ích của mô hình lịch cập nhật ngắn hơn. Các JEPs 309 và 318 giới thiệu các chức năng mới, trong khi hai JEP khác sử dụng một phương pháp lặp để phát triển các tính năng hiện có.

Với việc phát hành JDK 9 vào tháng 9 năm 2017, các mô đun Java EE và CORBA đã không được hỗ trợ. Một năm sau, với việc phát hành JDK 11, JEP 320 sẽ loại bỏ chúng khỏi JDK.

Và JEP 323 sẽ là một bước tiếp theo hợp lý sau khi JEP 286 giới thiệutype inference cho local variables trong JDK 10. Bạn nên mong đợi để thấy phương pháp này thường xuyên hơn trong tương lai.

Lịch phát hành và hỗ trợ ngắn đòi hỏi khả năng thích ứng nhanh

Cùng với mô hình phát hành mới, Oracle cũng đã thay đổi mô hình hỗ trợ của họ. Mô hình mới phân biệt giữa các bản phát hành ngắn hạn và dài hạn.

Bản phát hành ngắn hạn, như Java 9 và 10, sẽ chỉ được cập nhật cho đến khi bản phát hành tính năng tiếp theo được xuất bản. Vì vậy, hỗ trợ cho Java 9 kết thúc vào tháng 3 năm 2018, và Java 10 sẽ không nhận được bất kỳ bản cập nhật chính thức nào sau tháng 9 năm 2018.

Java 11 sẽ là bản phát hành dài hạn đầu tiên. Oracle muốn hỗ trợ các phiên bản này trong một khoảng thời gian dài hơn. Nhưng cho đến bây giờ, họ vẫn chưa nói rõ sẽ cung cấp các cập nhật chính thức cho Java 11 trong bao lâu.

Là một nhà phát triển ứng dụng, bạn sẽ cần phải quyết định xem liệu mình có muốn cập nhật phiên bản Java sáu tháng một lần hay là sau vài năm. Ngoài ra, Oracle khuyến khích mọi người di chuyển sang sản phẩm Java SE Advanced. Nó bao gồm ít nhất năm năm hỗ trợ cho mỗi lần phát hành dài hạn.

Techtalk via dzone

CHIA SẺ