Menu
CoddyTech

Môi trường thực thi (runtime environment) là gì?

Môi trường thực thi (runtime environment) là phần mềm bao quanh một chương trình trong lúc nó chạy: engine thực thi code, các thư viện chuẩn mà nó gọi, và các dịch vụ quản lý bộ nhớ, lỗi và quyền truy cập hệ điều hành. JVM, Node.js và CPython là những ví dụ.

Tác giả Kevin Spektor, Co-founder & CTO

Cập nhật 24 tháng 9, 2026

Chạy console.log(typeof process) trong Node.js và nó in ra object. Dán đúng dòng đó vào console của Chrome thì nó in ra undefined. Ở cả hai nơi ngôn ngữ đều là JavaScript, nhưng chương trình đang chạy trong hai môi trường thực thi khác nhau, và mỗi môi trường cung cấp cho nó những công cụ khác nhau.

console.log(typeof process);  // "object" in Node.js, "undefined" in a browser
console.log(typeof document); // "undefined" in Node.js, "object" in a browser

Môi trường thực thi cung cấp những gì

Code của bạn chỉ mô tả việc cần làm. Khi chạy, nó dựa vào một lớp phần mềm đã được cài đặt từ trước khi bạn viết dòng đầu tiên. Lớp đó thường có năm phần:

  1. Engine thực thi. Phải có thứ gì đó chạy code: một trình thông dịch, một máy ảo hoặc một trình biên dịch just-in-time. CPython, Máy ảo Java (JVM) và V8 là các engine thực thi.
  2. Thư viện chuẩn. Các hàm có sẵn cho văn bản, toán học, ngày tháng, tệp và mạng, như module json của Python hay package java.util của Java.
  3. Quản lý bộ nhớ. Runtime cấp phát bộ nhớ cho các đối tượng của bạn và, trong Python, Java và JavaScript, giải phóng nó bằng bộ thu gom rác (garbage collector) khi không còn gì dùng đến.
  4. Xử lý lỗi. Khi có sự cố, runtime dừng chương trình một cách có kiểm soát và báo lỗi ở đâu, dưới dạng traceback hoặc stack trace.
  5. Truy cập hệ điều hành. Đọc tệp, mở kết nối mạng, đọc biến môi trường và đối số dòng lệnh đều đi qua runtime, thứ thay mặt chương trình của bạn gửi yêu cầu đến hệ điều hành.

Bạn có thể hỏi runtime của Python về chính nó:

Kết quả phụ thuộc vào nơi code chạy. Trên máy chủ Linux, platform.system() trả về 'Linux', trên Mac là 'Darwin', còn trên Windows là 'Windows'. Giới hạn đệ quy (mặc định là 1000 trong CPython) là quy tắc do runtime đặt ra, không phải do ngôn ngữ Python, và hàng chục module đã được nạp trước dòng code đầu tiên của bạn chính là runtime đang tự chuẩn bị.

Java: JDK, JRE và JVM

Java cho thấy rõ các lớp này vì mỗi lớp có tên riêng:

TênViết tắt củaGồm những gìAi cần
JVMJava Virtual MachineEngine chạy bytecode (tệp .class) và quản lý bộ nhớLà một phần của cả hai bên dưới
JREJava Runtime EnvironmentJVM cộng các thư viện lớp chuẩnNgười chỉ chạy chương trình Java
JDKJava Development KitJRE cộng các công cụ cho lập trình viên: javac, jar, javadoc, jdbNgười viết chương trình Java

Quy trình là: javac Main.java (một công cụ của JDK, chính là trình biên dịch) biến mã nguồn thành Main.class, và java Main khởi động JVM, nạp lớp đó và chạy nó cùng các thư viện của môi trường thực thi. JVM là lý do một tệp .class chạy được trên Windows, macOS và Linux: mỗi hệ điều hành có JVM riêng, và tất cả đều hiểu cùng một bytecode.

Từ Java 11, Oracle chỉ phát hành JDK và không còn bản JRE tải riêng. Một số bản phân phối, như Eclipse Temurin, vẫn phát hành gói JRE. Nếu bạn đang học Java, hãy cài JDK: nó chứa mọi thứ mà JRE có. Hướng dẫn cài đặt Java đi qua từng bước. Để thử Java trước khi cài bất cứ thứ gì, trình biên dịch Java online chạy code của bạn trên JDK 24.

JavaScript: trình duyệt và Node.js

JavaScript được thiết kế để chạy bên trong trang web, nên môi trường thực thi đầu tiên của nó là trình duyệt. Runtime của trình duyệt cho code của bạn document của trang, window, bộ hẹn giờ và fetch để gửi request mạng, đồng thời cố ý chặn quyền truy cập trực tiếp vào tệp của bạn.

Node.js đưa engine V8 của Google ra khỏi trình duyệt và bọc nó trong một runtime khác: không có document, nhưng có các module như fs cho tệp, http cho máy chủ, và đối tượng process cho biến môi trường và đối số. Deno và Bun là các runtime mới hơn cho cùng ngôn ngữ, với công cụ riêng của chúng. Tất cả đều chạy cùng một phần lõi JavaScript; khác biệt nằm ở những gì bao quanh nó. Các trang runtime Node.js và event loop đi sâu hơn. Trình biên dịch JavaScript online chạy code của bạn trên Node.js hoặc Deno, và ví dụ đầu tiên trên trang này in ra object ở đó.

Python: CPython và các runtime khác

Khi nói "cài Python", người ta muốn nói cài một môi trường thực thi: trình thông dịch CPython, thư viện chuẩn và pip để thêm package. Cùng một ngôn ngữ còn có các runtime khác. PyPy thêm trình biên dịch JIT để tăng tốc, còn MicroPython đủ nhỏ để chạy trên vi điều khiển.

Môi trường ảo (python3 -m venv .venv) không phải là một runtime mới. Nó trỏ tới một trình thông dịch có sẵn và cho một dự án bộ package riêng, nhờ đó hai dự án có thể dùng hai phiên bản khác nhau của cùng một thư viện. Xem môi trường ảo.

Lúc biên dịch và lúc chạy

"Runtime" cũng chỉ một thời điểm: khoảng thời gian chương trình đang chạy, đối lập với lúc biên dịch (compile time), khi mã nguồn đang được dịch. Một sai sót mà trình biên dịch từ chối là lỗi lúc biên dịch; một sai sót chỉ xuất hiện khi chương trình chạy, như chia cho 0, là lỗi thực thi. Môi trường thực thi là phần mềm có mặt trong khoảng thời gian thứ hai đó.

Ngay cả C, ngôn ngữ biên dịch thẳng ra mã máy, cũng có một runtime nhỏ. Một chương trình C bắt đầu từ đoạn code khởi động do bộ công cụ biên dịch cung cấp, và các hàm như printf và malloc đến từ thư viện chuẩn C (glibc trên phần lớn hệ thống Linux, Universal C Runtime trên Windows). Chỉ là không có máy ảo và không có bộ thu gom rác.

Những hiểu lầm phổ biến

  • "Môi trường thực thi chính là hệ điều hành." Hệ điều hành quản lý phần cứng cho mọi chương trình. Môi trường thực thi là lớp riêng của một chương trình nằm bên trên nó. Bản thân JVM là một chương trình mà Windows, macOS hay Linux chạy; nó không thay thế các hệ điều hành đó.
  • "Node.js là một ngôn ngữ hoặc một framework." Node.js là môi trường thực thi cho JavaScript. Các framework như Express là thư viện chạy bên trong nó.
  • "Cài IDE là đã cài runtime." VS Code không đi kèm Python hay Java. Trình soạn thảo và môi trường thực thi được cài riêng, dù một số IDE, như IntelliJ IDEA, có thể tải JDK giúp bạn.
  • "Cùng ngôn ngữ thì ở đâu cũng chạy giống nhau." Các tính năng do runtime cung cấp, như truy cập tệp, giới hạn mặc định và các module có sẵn, có thể khác nhau. Code chạy được trong Node.js có thể lỗi trong trình duyệt chính vì lý do đó.

Đọc tiếp

Engine thực thi bên trong phần lớn runtime là một trình thông dịch, và trang đó cũng so sánh nó với trình biên dịch. Bên dưới mọi runtime là hệ điều hành. Để luyện tập trong một runtime bạn chưa từng dùng, hãy bắt đầu khóa học Java hoặc khóa học JavaScript.

Câu hỏi thường gặp

Ví dụ về môi trường thực thi là gì?

Java Runtime Environment (JRE) là ví dụ kinh điển: JVM cộng với các thư viện chuẩn của Java. Node.js là môi trường thực thi cho JavaScript bên ngoài trình duyệt, và bản thân trình duyệt cũng là một môi trường thực thi khác. Với Python, trình thông dịch CPython cùng thư viện chuẩn của nó chính là runtime.

Node.js có phải là môi trường thực thi không?

Có. Node.js là môi trường thực thi JavaScript được xây dựng trên engine V8 của Google. Nó cho phép JavaScript chạy bên ngoài trình duyệt và bổ sung các module cho tệp, mạng và tiến trình. Nó không phải ngôn ngữ lập trình cũng không phải framework; các framework như Express chạy bên trong nó.

Runtime thực sự nghĩa là gì?

"Runtime" có hai nghĩa. Đó là khoảng thời gian chương trình đang chạy, đối lập với lúc biên dịch, vì vậy các lỗi chỉ xuất hiện vào lúc đó được gọi là lỗi thực thi (runtime error). Nó cũng là cách gọi tắt của môi trường thực thi, phần mềm hỗ trợ chương trình trong khoảng thời gian đó.

Nên cài JRE hay JDK?
Hãy cài JDK nếu bạn viết Java, vì nó có trình biên dịch javac và mọi thứ trong JRE. Riêng JRE chỉ chạy được các chương trình Java có sẵn. Từ Java 11, Oracle chỉ phân phối JDK, nên với các phiên bản Java hiện tại, JDK là lựa chọn thông thường.
JDK, JRE và JVM là viết tắt của gì?
JDK là viết tắt của Java Development Kit, JRE là Java Runtime Environment và JVM là Java Virtual Machine. JVM chạy bytecode, JRE là JVM cộng các thư viện chuẩn, còn JDK là JRE cộng các công cụ phát triển như javac.
Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu