Đọc "Tại sao Java vẫn sống sót một cách hoàn hảo ? Phần 1" 

Đọc "Tại sao Java vẫn sống sót một cách hoàn hảo ? Phần 2" 

Bài dịch từ Medium

Tôi viết bài này như một lời hồi đáp cho tác giả của: Tại sao Java đang chết dần ?. Tôi có để lại một bình luận dưới bài viết đó mà không ngờ rằng nhận được rất nhiều sự đồng tình, thậm chí nó trở thành "top comment". Vậy nên tôi nghĩ mình phải trình bày luận điểm đối nghịch của mình một cách đầy đủ và rõ ràng.

Hệ sinh thái

Một số người hiểu hệ sinh thái ngôn ngữ rất hạn hẹp, chỉ bao gồm một tập hợp các thư viện để DEV sử dụng. Tôi thì thích cách suy nghĩ này hơn: hệ sinh thái của ngôn ngữ là công cụ để giải quyết các vấn đề. Càng nhiều vấn đề mà DEV có thể giải quyết, hệ sinh thái của nó càng rộng. Không quan trọng bạn nghĩ theo cách nào: Java có một hệ sinh thái khổng lồ !

Đây là danh sách các câu hỏi cá nhân mà tôi đã tự hỏi mình trước đây 

  1. Có thể viết ứng dụng web bằng Java thuần túy mà không có kiến ​​thức về HTML, JS và CSS không?  => Có
  2. Có thể sử dụng hàng Terabyte bộ nhớ heap mà chỉ tốn thời gian tính bằng mili giây không? Vâng, dễ dàng !
  3. Có thể xử lý hình ảnh và video bằng Java thuần túy mà vẫn có tính di động được không ? Được chứ !
  4. Có thể dùng Java trong Deep Learning không? => Có !
  5. Có thể lập trình robot bằng Java không? Có !

Mặc dù đây chỉ là danh sách cá nhân của tôi, nhưng tôi khá chắc chắn trong hầu hết các trường hợp “có” sẽ lấn át các trường hợp “không” khi các câu hỏi trong ngữ cảnh lập trình và liên quan đến Java.
Với sự trợ giúp của hệ sinh thái Java, bạn có thể giải quyết nhiều vấn đề và cũng có nhiều lựa chọn cách thực hiện. Nếu bạn muốn biết hệ sinh thái Java rộng lớn như thế nào, hãy xem tài nguyên này : https://github.com/akullpp/awesome-java

Thời gian khởi động và tiêu thụ bộ nhớ

Mã Java được biên dịch sang một dạng trung gian gọi là Java Byte Code, sau đó thực thi trên nền tảng runtime được gọi là JVM. Bên cạnh việc phàn nàn về cú pháp Java, các nhà phê bình thường phàn nàn về bộ nhớ JVM và thời gian khởi động. Cùng thảo luận kĩ hơn nhé

JVM - máy ảo Java, có nghĩa là ứng dụng của bạn chạy trong Sandbox của một máy tính ảo. Có rất nhiều lợi ích đối với cách tiếp cận như vậy. Các DEV không cần phải suy nghĩ về các sắc thái của hệ điều hành và phần cứng nơi các ứng dụng sẽ chạy. Sandbox cung cấp khả năng bảo mật cao hơn vì nó không cho phép các ứng dụng tương tác trực tiếp với cấp thấp hơn. Môi trường ảo không nằm trong ứng dụng của bạn và có thể tự động tối ưu hóa nó để tăng hiệu suất trong các tình huống khác nhau, v.v.

Một hạn chế của JVM là cần tài nguyên bổ sung, bao gồm bộ nhớ và thời gian xử lý, thời gian khởi động. 

Thông thường, Oracle HotSpot JVM tiêu chuẩn có thể sử dụng bộ nhớ hàng chục hoặc hàng trăm megabyte dung lượng bổ sung và cần thời gian khởi động trung bình vài giây, tùy thuộc vào ứng dụng. (Bản thân JVM thường bắt đầu trong vòng chưa đầy một giây, nhưng một số thư viện khác có thể làm tăng thời gian khởi động.) Ngoài ra, trong vài giây đầu tiên sau khi bắt đầu, JVM có thể tiêu thụ nhiều CPU hơn mức trung bình vì nó xác định và biên dịch “các điểm nóng” của mã bytecode của bạn để tối ưu hóa việc sử dụng.

Trong hầu hết các tình huống, những hạn chế này là hợp lý cho nhiều loại ứng dụng. Nhưng có những trường hợp không như vậy, và bạn muốn đánh đổi những lợi ích và hạn chế theo một cách nào đó. Bạn nên làm gì tiếp theo? Bạn có nên từ bỏ Java để chuyển sang thứ khác không? Thường là không - chỉ cần thực hiện một runtime khác phù hợp với nhiệm vụ cụ thể của bạn. 

Ví dụ, hãy xem xét microservice domain. Các ứng dụng microservice hiện đại thường cần ít dung lượng bộ nhớ và thời gian khởi động để ghi hiệu quả các bộ điều phối container như Kubernetes. Để đáp ứng nhu cầu này, các DEV Java đã tạo ra GraalVM. Nó cho phép các DEV tạo hình ảnh gốc từ mã Java sẽ chạy với thời gian khởi động hàng chục mili giây và chỉ có megabyte bộ nhớ bổ sung. Nhiều framworks Java thích ứng GraalVM cho microservice domain: Quarkus, Micronaut, Spring, Helidon.

Tráo đổi những hạn chế này nhé? Bạn sẽ mất tính di động và hình ảnh đã xây dựng có thể chạy độc quyền trên nền tảng mà nó được biên dịch bởi GraalVM. Nhưng đối với microservices, điều đó không thực sự quan trọng vì ứng dụng của bạn rất có thể sẽ chạy trong các container với môi trường được xác định trước. Bạn cũng có thể phải đối mặt với một số hạn chế khác. Dù sao, khi bạn nghe nói rằng Java không phù hợp với các yêu cầu microservice hiện đại, chỉ cần nhớ rằng: Tuyên bố đó là sai.

Java không sử dụng quá nhiều bộ nhớ và thời gian khởi động chậm như nhiều nhà phê bình nói. Việc sử dụng bộ nhớ và thời gian khởi động chủ yếu phụ thuộc vào runtime được sử dụng và thư viện mà ứng dụng đó đang sử dụng. Theo nghĩa này, hệ sinh thái Java cung cấp cho bạn các lựa chọn tùy thuộc vào những gì bạn cần.

Vậy ứng dụng thực sự của Java là gì?

Java có thể được sử dụng cho mọi thứ mà bạn có thể tưởng tượng: API và máy chủ web, trò chơi và phần mềm đa phương tiện, giao diện và ứng dụng web, IoT và robot, AR và VR, Machine Learning và Data Streaming, cơ sở dữ liệu và Cloud- native Microservice, hệ thống doanh nghiệp lớn hay những nguyên mẫu nhỏ.
Có bất kỳ loại trừ nào không? Về mặt kỹ thuật thì không, nhưng thực tế là có. Java không nhằm mục đích trở thành một ngôn ngữ hệ thống cấp thấp, vì vậy không phải là ý kiến ​​hay khi tạo phần lõi của hệ điều hành hoặc trình điều khiển phần cứng bằng Java. Về mặt kỹ thuật thì có thể sử dụng Java, nhưng bạn nên chọn những công cụ tốt hơn cho những trường hợp này.

Sử dụng JAVA có mất phí không?

Không, bạn không phải trả phí nếu chỉ sử dụng các bản Java miễn phí. Java là mã nguồn mở, do đó bất kỳ ai cũng có thể xây dựng bản phân phối Java sẵn sàng để sử dụng và có một số bản sẵn miễn phí như OpenJDK, AdoptOpenJDK, AWS Coretto, Azul Zulu, v.v. Việc sử dụng các bản phân phối này là hoàn toàn miễn phí và bất kỳ bản phân phối nào trong số chúng rất có thể sẽ đáp ứng yêu cầu của bạn. Nếu bạn muốn biết thêm, hãy tham khảo bài viết tại link này

Tương lai của Java

Tóm lại, Java vẫn là điều vĩ đại !

Vai trò của Java là trở thành công nghệ cốt lõi trong nhiều lĩnh vực, cân bằng giữa sự đổi mới, sức mạnh và khả năng bảo trì để hỗ trợ bền vững các dự án. Nếu bạn muốn thử nghiệm những ngôn ngữ mới thú vị, vui lòng chọn một công nghệ khác. Nhưng nếu bạn thấy rằng một tính năng liên quan tới đặc tả Java, bạn có thể chắc chắn rằng nó đã được thêm vào không phải do ngẫu nhiên hay do xu hướng, mà là kết quả của quá trình nghiên cứu và nỗ lực thiết kế rất lớn để đạt được cùng một mức độ đảm bảo cho các đặc trưng Java. Theo nghĩa này, bạn hoàn toàn có thể tin tưởng Java

Nếu bạn đang tự hỏi nên học ngôn ngữ lập trình nào, dù là ngôn ngữ đầu tiên hay tiếp theo, hãy thử Java. Tôi chắc chắn Java sẽ còn gắn bó lâu dài với chúng ta!

Tham khảo lộ trình Java Spring Boot Full Stack 7 tháng của Techmaster