post-image

JVM Đã Làm Cho Java Mạnh Mẽ Cỡ Nào?

1. Tổng quan

Cùng với JDK (Java Development Kit) và JRE (Java Runtime Environment), thì JVM (Java Virtual Machine) là một trong những thành phần quan trọng của nền tảng Java, giúp hỗ trợ phát triển và thực thi các ứng dụng Java. Trong bài viết này chúng ta sẽ cùng nhau cùng nhau tìm hiểu về JVM cũng như vai trò của nó trong nền tảng Java.

1. Java Virtual Machine là gì?

JVM hay Java Virtual Machine là một máy ảo cho phép chạy các chương trình Java cũng như các chương trình viết bằng các ngôn ngữ khác nhưng được biên dịch sang mã bytecode của Java. Do đó, từ một chương trình nhưng thông qua JVM nó có thể chạy được trên các nền tảng khác nhau.

JVM quản lý bộ nhớ hệ thống và cung cấp môi trường thực thi cho ứng dụng Java, nó có hai chức năng chính là cho phép chương trình Java chạy trên mọi thiết bị, nền tảng khác nhau (Write once, Run anywhere) và quản lý, tối ưu bộ nhớ chương trình.

Khi các nhà phát triển nói về JVM họ thường nghĩ tới cách chương trình được thực thi trong máy, đặc biệt là máy chủ, nó kiểm soát việc sử dụng tài nguyên cho ứng dụng Java. Điều đó khác với định nghĩa kĩ thuật của JVM, nó tuân thủ theo một đặc tả cho chương trình phần mềm, miêu tả những yêu cầu xây dựng chương trình và cung cấp môi trường thực thi code.

2. Quản lý bộ nhớ trong JVM thế nào?

Tương tác phổ biến nhất với JVM là kiểm tra lượng sử dụng bộ nhớ  trong vùng heap và stack, còn điều chỉnh phổ biến nhất là điều chỉnh cài đặt bộ nhớ Java. Chúng ta có thể thấy được việc theo dõi và kiểm soát bộ nhớ rất quan trọng đối với chương tình Java, do đó JVM cung cấp một công cụ quản lí bộ nhớ tự động đó là Garbage Collection(GC). GC sẽ liên tục xác định và loại bỏ những bộ nhớ không được sử dụng đến trong chương trình Java, nó được chạy đồng thời khi chạy JVM, đó cũng là một trong những nguyên nhân Java được coi là chậm hơn các ngôn ngữ khác.

Trước đó, việc quản lý bộ nhớ(ví dụ như cấp phát, giải phóng bộ nhớ) thường do người lập trình đảm nhiệm, khi nền tảng Java được ra đời đã nhận được nhiều chỉ trích về việc kém “close to the metal”(ý nói về khả năng quản lý bộ nhớ của lập trình viên) so với C++, do đó nên Java chậm hơn. Nhưng trên thực tế, việc ủy quyền quản lý bộ nhớ cho một quy trình đã được tinh chỉnh tốt như JVM lại mang lại nhiều lợi ích về hiệu suất và ít xuất hiện lỗi về bộ nhớ, hơn nữa công cụ Garbage Collection ngày càng được nâng cao và cải tiến.

3. Nạp và thực thi file Java class trong JVM

Chúng ta nói về những vai trò của JVM trong việc chạy chương trình Java, nhưng thực sự JVM hoạt động như thế nào. Để chạy chương tình Java JVM cần dựa vào 2 công cụ Java Class Loader và Java execution Engine.

Java class loader:

Mọi thứ trong Java hay ứng dụng Java được xây dựng bởi các Classes. Để chạy ứng dụng Java, JVM cần phải biên dịch các file .class sang mã bytecode trước nhờ vào công cụ class loader. Java class loader là một phần trong quá tình hoạt động của JVM, nó nạp các class vào trong bộ nhớ và giúp chúng có thể được thực thi hiệu quả nhất thông qua các kĩ thuật như lazy-loading và caching.

Java execution engine:

Khi class loader thực hiện xong nhiệm vụ của nó, execution engine giúp JVM thực thi code trong mỗi class. Execution engine rất cần thiết để chạy JVM, nó là phần kết nối giữa chương trình và hệ điều hành, giúp quản lý các yêu cầu truy cập tài nguyên của chương trình đến hệ thống.

Khi bạn tiến hành chạy một chương trình java, class loader sẽ nạp tất cả các file .class trong chương trình của bạn và cả những file .class cần thiết có sẵn ở trong thư viện của Java để biên dịch ra mã bytecode, mã bytecode này sẽ giúp các thành phần phía sau của JVM có thể hiểu và chạy chương trình. Mã bytecode này sẽ được lưu tại vùng nhớ được cấp phát bởi JVM. Trong đó, heap chứa các Object, stack chứa các biến tạm thời, pc registers chứa địa chỉ của thread,… còn native method stack để thực thi các phương thức native(non-java). Cuối cùng, execution engine sẽ là cầu nối tới hệ điều hành giúp cho chương trình có thể truy cập được các tài nguyên như file, bộ nhớ, network,….

4. Sự phát triển của JVM

Năm 1995, JVM được giới thiệu với hai khái niệm mang tính cách mạng là viết một lần chạy mọi nơi (write once, run anywhere) và sự quản lý bộ nhớ tự động. Khả năng tương tác giữa các phần mềm là một khái niệm táo bạo vào thời điểm đó, nhưng thực tế ngày nay rất ít nhà phát triển lại nghĩ về nó. Tương tự như vậy, so với thế hệ nhà phát triển đi trước phải quan tâm tới việc tự quản lý bộ nhớ chương tình thì thế hệ chúng ta bây giờ lớn lên với sự phát triển của Garbage Collection.

Có thể nói rằng James Gosling đã tạo ra một ngôn ngữ lập trình hiện đại. Trong khi JVM được tạo ra với mục đích ban đầu là hỗ trợ Java, thì ngày nay nó còn hỗ trợ cho nhiều ngôn ngữ lập trình hay ngôn ngữ scripts khác, gồm có Scala, Groovy, và Kotlin. Cuối cùng thật khó để nói rằng JVM không còn xuất hiện trong bối cảnh phát triển của tương lai.

Nguồn tham khảo: infoworld

Lời kết

Qua bài này các bạn đã phần nào hình dung được bức tranh khái quát về JVM cũng như vai trò của nó trong nền tảng Java. Nếu bài viết có ý nghĩa, bạn đọc hãy để lại bình luận cũng như đánh giá giúp bài viết tốt hơn. Cảm ơn bạn đọc, chúc bạn đọc thành công trên con đường học tập!

Trả lời

Email của bạn sẽ không được hiển thị công khai.