5 tính năng trong Java 9 làm thay đổi cách bạn phát triển phần mềm

Bài gốc: http://blog.takipi.com/5-features-in-java-9-that-will-change-how-you-develop-software-and-2-that-wont/

Các tính năng của Java 8 mình mới chỉ lấy các ví dụ mẫu để thực hành, đọc trên sách là chủ yếu, chưa áp dụng tính năng mới nào của Java 8 vào thực thế vì các dự án thật hiện tại chủ yếu trên Java 7, có cái tận Java 6, vậy mà Java 9 đang trong giai đoạn hoàn thiện, tháng 12 sẽ hoàn thành các tính năng để vào giai đoạn kiểm thử. Đây là lộ trình của Java 9: 

2015-12-10: Feature Complete
2016-02-04: All Tests Run
2016-02-25: Rampdown Start
2016-04-21Zero Bug Bounce
2016-06-16: Rampdown Phase 2
2016-07-21: Final Release Candidate
2016-09-22: General Availability

Công nghệ nó chạy thì mình phải đua theo, không thể khác được :)). Tất cả tính năng mới của Java 9: http://blog.takipi.com/java-9-the-ultimate-feature-list/. Mình dịch bài này vì cái tiêu đề có vẻ … nói hơi quá :v

Rất nhiều thông tin hay trong các đường dẫn có trong bài viết, các bạn nên xem qua.

Đừng cảm thấy rối trí bởi những im lặng gần đây xung quanh Java 9. Các JDK commiters (chơi chữ) đang làm việc vất vả để chuẩn bị cho lần phát hành tiếp theo, mong chờ những tính năng hoàn thiện trong vài tháng tới (12/2015). Sau đó, nó sẽ trải qua giai đoạn kiểm thử nghiêm ngặt và sửa lỗi để chuẩn bị cho phát hành rộng rãi (general availability), theo kế hoạch là vào tháng 9/2016.

Hôm nay, chúng ta có một bức tranh rõ ràng về những tính năng mới mà chúng ta mong đợi trong Java 9. Nếu Java 8 với những phát hành chính như lambdas, streams và một số thay đổi API, thì tất cả trong Java 9 là Jigsaw, những tiện ích mở rộng và thay đổi bên dưới. Bài viết này, chúng tôi sẽ tập hợp một số những tính năng mà chúng tôi cho là hấp dẫn nhất trong Java 9. Ngoại trừ những khả nghi thông thường, dự án Jigsaw gánh vác nhiệm vụ phá vỡ JRE và mang lại tính module hoá cho các thành phần của Java.

Đây là một số tính năng mà bắt buộc phải biết trong Java 9, một số đã sẵn sàng cho bạn ‘chơi’ ở bản phát hành sớm.

Java + REPL = jshell

Vâng, lần trước chúng ta đã nghi ngờ rằng project Kulla sẽ làm nó (jshell) trong Java 9 nhưng giờ đã là thông tin chính thức. Bản phân phối tiếp theo của Java sẽ phát hành một công cụ Command Line gọi là jshell để hỗ trợ chính thức và phổ cập Java để REPL(Read-Eval-Print-Loop). Ý nghĩa là nếu bạn muốn chạy một vài dòng lệnh Java, bạn sẽ không phải bọc đống mã lệnh vào một project hay một hàm nào đó. Và cái dấu ; (semicolons), bạn có thể quên nó luôn đi hehe

Có một số lựa chọn khác như các add-on cho các IDE thông dụng hay giải pháp bảng điều khiển (console) trên nền tảng web Java REPL, nhưng chúng chưa phải là chính thức cho đến thời điểm này. jshell đã sẵn sàng trong lần phát hành sớm và đang đợi bản kiểm tra thử.

Microbenmark đang đến

Java Microbenmark Harness (JMH) của Alexey Shipilev đang triển khai phiên bản tiếp theo và đưa vào Java như một giải pháp đánh giá điểm chuẩn (benchmark) chính thức. Tại Takipi chúng tôi thật sự thích việc đánh giá tiêu chuẩn (benchmarks), nên việc tiêu chuẩn hoá chúng là điều chúng tôi mong đợi.

Phần này khó dịch do mình cũng chưa nắm về JMH (mình sẽ cố gắng tìm hiểu để dịch một bài viết khác về JMH)

JMH is a Java harness for building, running, and analysing nano/micro/milli/macro benchmarks. When it comes to accurate benchmarking, there are forces in play like warmup times and optimizations that can have a big impact on results. Especially when you’re going down to micro and nano seconds. So today JMH is your best choice if you want to get the most accurate results to help you reach the right decision following your benchmarks – And now it’s becoming a synonym with Java 9.

Có phải G1 sẽ trở thành bộ dọn rác (Garbage Collector) mặc định mới trong Java?

Có một hiểu lầm chung là chúng ta thường nghe rằng Java chỉ có một bộ dọn rác (garbage collector) duy nhất trong khi chúng có tới 4 lận đó à nha. Với Java 9, có một vấn đề đang được tranh luận để thay thế bộ dọn rác mặc định hiện tại (The parallel/throughput collector) thành G1 được giới thiệu trong Java 7. Để có cái nhìn tổng quan về sự khác biệt giữa các bộ dọn rác, bạn có thể xem thêm ở bài viết này.

Nói chung, G1 được thiết kế tốt hơn để hỗ trợ bộ nhớ heaps hơn 4GB và gây tắt nghẽn bộ dọn rác ít thường xuyên hơn, nhưng khi bị tạm dừng, nó có xu hướng tạm dừng lâu hơn. Gần đây, chúng ta đã thảo luận tất cả mọi thứ về bộ dọn rác với Haim Yadid, người đứng đầu nhóm hiệu suất ở Outbrain, để giúp đỡ bạn tiếp cận nhiều hơn về việc thay đổi giữa các bộ dọn rác. Ngoài ra, nếu bạn muốn có cái nhìn tổng thể bên trong vấn đề nà, hotspot-devjkd9-dev là nơi tuyệt vời để bắt đầu.

HTTP 2.0 là tương lai

HTTP 2.0 RFC chính thức đã được phê duyệt vài tháng trước đây, xây dựng trên thuật toán SPDY của Google. SPDY đã thể hiện việc cải tiến tốc tuyệt vời so với HTTP 1.1 khoản 11.1% đến 47.7%, hiện thực của nó đã tồn tại trong các trình duyệt hiện đại.

Java 9 sẽ hỗ trợ đầy đủ tính năng cho HTTP 2.0 và đưa ra một HTTP Client mới cho Java, thay thế cho HttpURLConnection, đồng thời hiện thực HTTP 2.0 và websockets.

API cho process nhận được sức hút lớn.

Đến nay có những hạn chế nhất định cho việc điều khiển và quản lý các tiến trình của hệ điều hành trong Java. Ví dụ, để làm gì đó đơn giản như lấy PID của các tiến trình, trong các phiên bản trước của Java, bạn cần truy cập vào native code hay sử dụng một vài cách ảo diệu khác. Tuy nhiên, nó đòi hỏi những cách hiện thực khác nhau cho mỗi platform để bảm bảo bạn nhận được kết quả đúng.

Trong Java 9, để lấy được PID trong Linux, đoạn mã sẽ thế này (Ý trên là code cũ trong các phiên bản trước của Java)

bạn chỉ cần thế này là được (áp dụng cho tất cả các hệ điều hành):

Cập nhật này mở rộng khả năng của Java để tương tác với hệ điều hành: Những phương thức để xử lý PIDs trực tiếp, tên và trạng thái của tiến trình, và khả năng liệt kê các JVMs cùng các tiến trình đang chạy.

Những gì bạn sẽ không thấy trong Java 9?

Hai tính năng khá thú vị mà chúng ta nghĩ sẽ được ra đời cùng với Java 9 nhưng bây giờ bị hoãn lại.

  1. Chuẩn hoá các API cho JSON
  2. API cho Money và Currency
Như các bạn thấy mình dịch khá tệ, dịch từng từ nên khó truyền đạt hết hàm ý của các giả. Mình chỉ cố gắng cung cấp nhiều nhất từ khóa có thể để mọi người tìm kiếm. Mình khuyên các bạn nên đọc bài gốc tiếng Anh.

Got something to say? Go for it!