JRE là gì? Mẹo để tối ưu JRE

Nguyễn Quỳnh Anh
Cùng với JDK và JVM(Java Vitrual Machine), JRE là một trong ba thành phần cơ bản tạo nên nền tảng Java, hỗ trợ phát triển và thực thi các ứng dụng Java. Cùng tìm hiểu về JRE là gì, cách thức hoạt động cũng như các mẹo sử dụng JRE hiệu quả.

JRE là gì?

JRE là viết tắt của Java Runtime Environment.

JRE được thiết kế nhằm hỗ trợ chạy các chương trình Java, đảm bảo kết nối tới bộ nhớ và các tài nguyên hệ thống khác. Nhìn chung, JRE đảm bảo chương trình Java chạy được trên hầu hết hệ điều hành mà không cần phải sửa đổi. Nó còn cung cấp những dịch vụ giá trị, như quản lý bộ nhớ tự động (Automatic Memory Management) - một trong những dịch vụ quan trọng nhất của JRE; đồng thời giúp các lập trình viên cấp phát và giải phóng bộ nhớ một cách tự động.

JRE là một trong ba thành phần liên quan đến sự phát triển và chạy các chương trình Java. Hai thành phần còn lại là:

  • JDK (Java Development Kit): là bộ công cụ để phát triển các ứng dụng Java. Các nhà phát triển chọn JDK theo phiên bản Java và theo gói, như Java Enterprise Edition (Java EE), Java Special Edition (Java SE), or Java Mobile Edition (Java ME). Mọi JDK luôn bao gồm một JRE tương ứng, bởi vốn dĩ chạy chương trình Java là một phần của quá trình phát triển chương trình Java.
  • JVM (Java Virtual Machine): cho phép các chương trình Java chạy được trên mọi thiết bị hay hệ điều hành (nguyên tắc là "Viết một lần, chạy mọi nơi"); quản lý và tối ưu bộ nhớ thực thi các ứng dụng Java trực tiếp. Mỗi JVM gồm một JRE mặc định, tuy nhiên, các nhà phát triển có thể tự chọn JRE khác, đáp ứng nhu cầu tài nguyên của họ.

JRE kết hợp Java code bằng cách sử dụng JDK cùng các thư viện Java cần thiết để chạy nó trên một JVM và sau đó tạo ra một phiên bản của JVM để thực thi chương trình. Các JVM tương thích với nhiều hệ điều hành, do đó, các chương trình được tạo bằng JRE sẽ chạy được trên tất cả các hệ điều hành đó. Theo cách này, có thể hiểu rằng JRE chính là thứ cho phép chương trình Java chạy trong bất kỳ hệ điều hành nào mà không cần sửa đổi.

Sự khác biệt giữa JRE, JVM và JDK

Nhiều người thường nhầm lẫn các thuật ngữ JRE, JVM và JDK với nhau. Dưới đây là tổng quan nhanh về từng loại:

  • Java Runtime Environment (JRE) là những gì bạn cần để chạy một ứng dụng Java. Nó bao gồm JVM, cũng như các thành phần hỗ trợ khác.
  • Java Vitrual Machine (JVM) là trung tâm của nền tảng Java. Nó là thành phần thực thi code.
  • Java Development Kit (JDK) là thứ bạn cần nếu muốn phát triển các ứng dụng Java. Ngoài JRE, nó bao gồm Interpreter và các công cụ cần thiết khác để phát triển.
jre01-1673522622.png

Tại sao JRE lại quan trọng?

Một chương trình phần mềm cần runtime environment để có thể truy cập vào bộ nhớ và các tài nguyên hệ thống. Trước đây, hầu hết các phần mềm đều sử dụng luôn hệ điều hành làm runtime environment. Tuy nhiên, điều này đồng nghĩa với việc các nhà phát triển phải viết các code khác nhau cho từng hệ điều hành để có thể chạy ứng dụng trên đó. Công nghệ JRE đã được tạo ra để giải quyết vấn đề này.

JRE hoạt động như thế nào?

JDK và JRE tương tác với nhau để tạo ra một Runtime Environment* bền vững, cho phép thực thi liền mạch các ứng dụng dựa trên Java trong hầu hết hệ điều hành. JRE có kiến trúc như sau:

ClassLoader

Java ClassLoader tải động tất cả các lớp cần thiết để chạy một chương trình Java. Vì các lớp Java (Java classes) chỉ được tải vào bộ nhớ khi có yêu cầu, nên JRE sử dụng ClassLoaders để tự động hóa quá trình này theo yêu cầu.

Bytecode verifier

Trình xác minh bytecode đảm bảo định dạng và độ chính xác của Java code trước khi chuyển nó sang công cụ phiên dịch ngôn ngữ lập trình (Interpreter). Trong trường hợp code vi phạm tính toàn vẹn của hệ thống hay quyền truy cập, lớp sẽ bị xét là hỏng và sẽ không được tải.

Interpreter

Sau khi bytecode được tải thành công, trình thông dịch của Java sẽ tạo ra một phiên bản JVM cho phép chương trình Java được thực thi tự nhiên trên máy cơ bản.

*Runtime Environment là cơ sở hạ tầng phần mềm và phần cứng hỗ trợ chạy một codebase cụ thể (nội dung hoàn chỉnh của mã nguồn cho một chương trình hay ứng dụng nhất định) trong thời gian thực.

jret-1673522623.png
JRE được thiết kế nhằm hỗ trợ chạy các chương trình Java

JRE gồm những thành phần nào?

Bên cạnh JVM, JRE gồm nhiều công cụ và tính năng hỗ trợ khác để có thể tận dụng tối đa các ứng dụng Java.

Giải pháp triển khai

Các công nghệ triển khai được xem là một phần trong cài đặt JRE, như Java Web Start và Java Plugin giúp đơn giản hóa việc kích hoạt ứng dụng và cung cấp hỗ trợ nâng cao cho các bản cập nhật Java trong tương lai.

Bộ công cụ phát triển

JRE cũng chứa các bộ công cụ được thiết kế để giúp các nhà phát triển cải thiện giao diện người dùng của họ. Một số bộ công cụ có thể kể đến như:

  • Java 2D: Giao diện lập trình ứng dụng (API) được sử dụng để vẽ đồ họa hai chiều bằng ngôn ngữ Java. Nhà phát triển có thể tạo giao diện người dùng phong phú, hiệu ứng đặc biệt, trò chơi và ảnh động.
  • Abstract Window Toolkit (AWT): Giao diện đồ họa người dùng (GUI) được dùng để tạo các object, button, scroll bar và window.
  • Swing: là một GUI khác, cung cấp các tùy chỉnh linh hoạt, thân thiện với người dùng.

Thư viện tích hợp

JRE cung cấp một số thư viện tích hợp (Integration libraries) để hỗ trợ các nhà phát triển kết nối liền mạch các ứng dụng và dịch vụ của họ. Một số thư viện này là:

  • Java IDL (CORBA): Sử dụng CORBA) để hỗ trợ các đối tượng phân tán viết bằng ngôn ngữ lập trình Java.
  • Java Database Connectivity (JDBC) API: Cung cấp các công cụ để nhà phát triển viết ứng dụng với quyền truy cập vào cơ sở dữ liệu quan hệ từ xa, flat file và spreadsheet.
  • Java Naming and Directory Interface (JNDI): Cho phép khách hàng tạo các ứng dụng di động có thể tìm nạp thông tin từ cơ sở dữ liệu bằng các tên quy ước.

Ngôn ngữ và Thư viện tiện ích

Gắn liền với JRE là java.lang. và java.util., đây là các gói cơ bản trong thiết kế ứng dụng Java, tạo phiên bản gói, quản lý và giám sát. Một số gói này bao gồm:

  • Collections Framework: Kiến ​​trúc hợp nhất được tạo từ tập hợp các giao diện được thiết kế nhằm cải thiện việc lưu trữ và xử lý dữ liệu ứng dụng.
  • Concurrency Utilities: Gói khung mạnh mẽ với các tiện ích phân luồng hiệu suất cao.
  • Preferences API: API liên tục, nhẹ, đa nền tảng cho phép nhiều người dùng trên cùng một máy xác định ứng dụng tùy chọn của riêng họ.
  • Logging: Tạo báo cáo nhật ký - chẳng hạn lỗi bảo mật, lỗi cấu hình và các vấn đề về hiệu suất - để phân tích thêm.
  • Java Archive (JAR): Định dạng tệp độc lập với nền tảng cho phép nhóm nhiều tệp ở định dạng JAR, cải thiện đáng kể tốc độ tải xuống và giảm kích thước tệp.
jre02-1673522624.png
Tại sao JRE cần được tối ưu?

Tại sao JRE cần được tối ưu?

Đầu tiên, nếu JRE của bạn không được tối ưu hóa, các ứng dụng Java của bạn có thể sẽ chạy chậm và thậm chí bị lỗi. Thứ hai, một JRE được tối ưu hóa sẽ sử dụng ít bộ nhớ hơn, điều đó có nghĩa là máy tính của bạn có thể chạy đồng thời nhiều ứng dụng hơn mà máy tính không bị chậm đi. Cuối cùng, một JRE được tối ưu hóa cũng sẽ khởi động nhanh hơn, điều này rất quan trọng khi bạn cần khởi động lại ứng dụng của mình thường xuyên.

Mẹo để tối ưu JRE

Nhìn chung, JRE cung cấp một số tính năng và lợi ích có thể giúp cải thiện hiệu suất của các ứng dụng Java của bạn. Bằng cách làm theo các mẹo này, bạn có thể giúp đảm bảo rằng các ứng dụng của mình đang chạy hiệu quả nhất có thể.

Sử dụng phiên bản JRE mới nhất

Một trong những cách tốt nhất để tối ưu JRE là sử dụng phiên bản mới nhất. Các phiên bản mới hơn sẽ có những cải tiến hiệu suất và sửa lỗi để giúp ứng dụng chạy trơn tru hơn.

Để kiểm tra xem bạn đang sử dụng phiên bản JRE nào, hãy mở CMD:

  • WINDOWS + R -> Nhập cmd -> Enter
  • Và nhập: java -version -> Enter

Sử dụng JRE 64-bit

Một cách khác để tối ưu JRE là sử dụng phiên bản 64 bit thay vì 32 bit. JRE 64-bit có thể tận dụng nhiều bộ nhớ hơn, tức các ứng dụng có thể chạy nhanh hơn và mượt hơn.

Để kiểm tra xem bạn đang sử dụng JRE 32 bit hay 64 bit, hãy mở CMD và nhập lệnh: java-d64 -> Enter

Nếu bạn thấy hiện "Error occurred during initialization of VM", thì bạn đang sử dụng JRE 32 bit. Nếu bạn thấy đầu ra "Cảnh báo máy chủ 64 bit", thì bạn đang sử dụng JRE 64 bit.

Sử dụng Máy chủ JRE

Nếu bạn chạy các ứng dụng Java trên máy chủ, bạn nên sử dụng Server JRE thay vì JRE tiêu chuẩn. Server JRE được thiết kế đặc biệt cho các máy chủ và bao gồm các cải tiến về hiệu suất để giúp các ứng dụng của bạn chạy hiệu quả hơn.

Điều chỉnh bộ thu gom rác

Trình thu gom rác chịu trách nhiệm thu hồi bộ nhớ đang không sử dụng của các ứng dụng Java. Trình thu gom rác chạy tự động theo mặc định, nhưng bạn cũng có thể điều chỉnh nó để phù hợp hơn với nhu cầu của mình.

Khi thực hiện để điều chỉnh trình thu gom rác, một trong những điều quan trọng nhất là chỉ định dung lượng bộ nhớ mà bạn muốn nó sử dụng. Khi bạn khởi động các ứng dụng Java, bạn có thể đặt các tham số -Xmx và -Xms.

Ví dụ: nếu bạn muốn ứng dụng của mình có thể sử dụng 512MB bộ nhớ, bạn sẽ chỉ định tham số -Xmx như sau: java-Xmx512m...

Sử dụng profiler

Nếu bạn gặp sự cố với các ứng dụng Java, thì hãy sử dụng profiler. Profiler có thể giúp bạn xác định nơi chiếm nhiều thời gian nhất và xác định các điểm nghẽn. Thông tin này sau đó có thể được sử dụng để tối ưu hóa code của bạn và cải thiện hiệu suất của các ứng dụng.

Một số Profiler phổ biến nhất bao gồm JProfiler, YourKit và VisualVM.

Làm theo các mẹo này, bạn có thể giúp đảm bảo rằng các ứng dụng Java của mình đang chạy hiệu quả nhất có thể.

Tóm lại, nếu bạn muốn chạy một ứng dụng Java, bạn cần có JRE. Nếu bạn định phát triển các ứng dụng Java, bạn cần có JDK. Và trung tâm của cả hai chính là JVM. Qua bài viết, hy vọng các bạn đã tìm hiểu về JRE là gì, một trong những thành phần quan trọng trong nền tảng Java, cũng như nắm được những mẹo hữu ích để sử dụng JRE một cách hiệu quả nhất.