运行环境是什么?
运行环境(runtime environment)是程序运行时所依赖的外围软件:执行代码的引擎、代码调用的标准库,以及负责管理内存、错误和操作系统访问的各项服务。JVM、Node.js 和 CPython 都是运行环境的例子。
更新于 2026年9月24日
在 Node.js 中运行 console.log(typeof process),它会打印 object。把同一行代码粘贴到 Chrome 的控制台里,它打印的却是 undefined。两边用的都是同一门 JavaScript 语言,但程序运行在两个不同的运行环境里,每个环境提供给它的工具都不一样。
console.log(typeof process); // "object" in Node.js, "undefined" in a browser
console.log(typeof document); // "undefined" in Node.js, "object" in a browser
运行环境提供什么
你的代码只描述要做什么。代码运行时,要依靠一层在你写下第一行代码之前就已经装好的软件。这一层通常包括五个部分:
- 执行引擎。 总得有个东西来运行代码:解释器、虚拟机或即时编译器。CPython、Java 虚拟机(JVM)和 V8 都是执行引擎。
- 标准库。 处理文本、数学、日期、文件和网络的现成函数,比如 Python 的
json模块或 Java 的java.util包。 - 内存管理。 运行环境为你的对象分配内存;在 Python、Java 和 JavaScript 中,当对象不再被使用时,垃圾回收器会把内存释放掉。
- 错误处理。 出问题时,运行环境以受控的方式停止程序,并以 traceback 或堆栈跟踪的形式报告出错位置。
- 访问操作系统。 读取文件、打开网络连接、读取环境变量和命令行参数,都要经过运行环境,由它代表你的程序向操作系统提出请求。
你可以让 Python 运行环境介绍一下它自己:
结果取决于代码在哪里运行。在 Linux 服务器上,platform.system() 返回 'Linux',在 Mac 上返回 'Darwin',在 Windows 上返回 'Windows'。递归深度上限(CPython 默认为 1000)是运行环境设定的规则,而不是 Python 语言本身的规则;在你的第一行代码执行前就已加载的几十个模块,是运行环境在做准备工作。
Java:JDK、JRE 和 JVM 的区别
Java 把这些层次都摆在了明面上,因为每一层都有自己的名字:
| 名称 | 全称 | 包含什么 | 谁需要它 |
|---|---|---|---|
| JVM | Java Virtual Machine(Java 虚拟机) | 运行字节码(.class 文件)并管理内存的引擎 | 下面两者都包含它 |
| JRE | Java Runtime Environment(Java 运行环境) | JVM 加上标准类库 | 只运行 Java 程序的人 |
| JDK | Java Development Kit(Java 开发工具包) | JRE 加上开发工具:javac、jar、javadoc、jdb | 编写 Java 程序的人 |
流程是这样的:javac Main.java(JDK 中的工具,也就是编译器)把源代码转换成 Main.class,java Main 启动 JVM,JVM 加载这个类,并借助运行环境中的库来运行它。正因为有 JVM,同一个 .class 文件才能在 Windows、macOS 和 Linux 上运行:每个操作系统都有自己的 JVM,而它们都能理解同样的字节码。
从 Java 11 开始,Oracle 只提供 JDK,不再单独提供 JRE 下载。有些发行版,比如 Eclipse Temurin,仍然会发布 JRE 包。如果你正在学 Java,就安装 JDK:JRE 有的它全都有。安装 Java 指南会一步步带你完成。想在安装任何东西之前先试试 Java,可以用 Java 在线编译器,它在 JDK 24 上运行你的代码。
JavaScript:浏览器和 Node.js
JavaScript 最初是为了在网页里运行而设计的,所以它的第一个运行环境就是浏览器。浏览器运行环境为你的代码提供页面的 document、window、定时器,以及用于网络请求的 fetch,并且有意禁止直接访问你的文件。
Node.js 把 Google 的 V8 引擎从浏览器里拿出来,包进了一个不同的运行环境:没有 document,但有处理文件的 fs、搭建服务器的 http 等模块,还有用于读取环境变量和参数的 process 对象。Deno 和 Bun 是同一门语言的较新的运行环境,各自带有自己的工具。它们运行的都是同样的核心 JavaScript,区别在于外围提供了什么。Node.js 运行环境和事件循环两页有更深入的介绍。JavaScript 在线编译器在 Node.js 或 Deno 上运行你的代码,本页的第一个例子在那里会打印 object。
Python:CPython 及其他实现
人们说“安装 Python”,指的是安装一个运行环境:CPython 解释器、标准库,以及用来添加包的 pip。同一门语言还有其他运行环境。PyPy 加入了 JIT 编译器来提升速度,MicroPython 则小到可以在微控制器上运行。
虚拟环境(python3 -m venv .venv)并不是一个新的运行环境。它指向一个已有的解释器,为单个项目提供一套独立安装的包,这样两个项目就可以使用同一个库的不同版本。参见虚拟环境。
编译时和运行时
“runtime”还指一个时间段:程序正在运行的这段时间,与源代码被翻译的编译时相对。被编译器拒绝的错误是编译时错误;只在程序运行时才出现的错误,比如除以零,就是运行时错误。运行环境就是在第二个时间段里存在的那些软件。
就连直接编译成机器码的 C 语言,也有一个小小的运行环境。C 程序从编译工具链提供的启动代码开始执行,printf 和 malloc 这样的函数来自 C 标准库(大多数 Linux 系统上是 glibc,Windows 上是 Universal C Runtime)。只不过它没有虚拟机,也没有垃圾回收器。
常见误解
- “运行环境就是操作系统。” 操作系统为所有程序管理硬件。运行环境是某个程序在操作系统之上的那一层。JVM 本身就是一个由 Windows、macOS 或 Linux 运行的程序,它并不取代操作系统。
- “Node.js 是一门语言或一个框架。” Node.js 是 JavaScript 的运行环境。Express 这样的框架是运行在它里面的库。
- “安装 IDE 就装好了运行环境。” VS Code 并不自带 Python 或 Java。编辑器和运行环境需要分别安装,不过 IntelliJ IDEA 等一些 IDE 可以帮你下载 JDK。
- “同一门语言,在哪里表现都一样。” 运行环境提供的功能,比如文件访问、默认限制和可用的模块,可能各不相同。在 Node.js 里能运行的代码,放到浏览器里可能会失败,原因正在于此。
下一步学什么
大多数运行环境内部的执行引擎是解释器,那一页还把它和编译器做了对比。每个运行环境的下面都是操作系统。想在一个你还没用过的运行环境里练习,可以开始学习 Java 课程或 JavaScript 课程。
常见问题
运行环境有哪些例子?
最经典的例子是 Java 运行环境(JRE):JVM 加上 Java 的标准库。Node.js 是在浏览器之外运行 JavaScript 的运行环境,浏览器本身也是一种运行环境。对 Python 来说,CPython 解释器连同它的标准库就是运行环境。
Node.js 是运行环境吗?
是的。Node.js 是基于 Google V8 引擎构建的 JavaScript 运行环境。它让 JavaScript 能在浏览器之外运行,并增加了处理文件、网络和进程的模块。它既不是编程语言,也不是框架;Express 这样的框架运行在它里面。
runtime 到底是什么意思?
“runtime”有两层意思。一是指程序正在运行的这段时间,与编译时相对,所以只在这时出现的错误叫作运行时错误。二是运行环境的简称,指在这段时间里支撑程序运行的软件。
应该安装 JRE 还是 JDK?
javac 以及 JRE 的全部内容。单独的 JRE 只能运行现成的 Java 程序。从 Java 11 开始,Oracle 只发布 JDK,所以对于当前的 Java 版本,安装 JDK 是常规选择。JDK、JRE 和 JVM 分别是什么的缩写?
javac 等开发工具。