Java 运行时环境(JRE)是一种开放获取的软件发行版,包含 Java 类库、特定工具以及一个独立的 Java 虚拟机(JVM)。它是 Java 开发工具包(JDK)的核心组件之一
JRE 为运行 Java 程序提供了必要的运行环境
Java 源代码首先被编译为 Java 字节码,而要在任意平台上执行该字节码,则必须依赖 JRE
JRE 负责处理诸如类加载、内存访问检查以及系统资源访问等任务
它作为操作系统之上的一个软件层,使 Java 程序具备平台无关性
JRE 的组件包括以下集成库:
Java 数据库连接(JDBC)
Java 命名与目录接口(JNDI)
接口定义语言(IDL)
基于 Internet ORB 间协议的远程方法调用(RMI-IIOP)
远程方法调用(RMI)
脚本支持(Scripting)
Java 虚拟机(JVM)包含 Java HotSpot 客户端虚拟机和服务器虚拟机
用户界面库包括:Swing、Java 2D、抽象窗口工具包(AWT)、辅助功能(Accessibility)、图像 I/O(Image I/O)、打印服务(Print Service)、音频(Sound)、拖放(Drag and Drop,DnD)以及输入法(Input Methods)
语言与工具基础库包括:lang 和 util 包、zip、集合(Collections)、并发工具(Concurrency Utilities)、管理(Management)、Java 归档(JAR)、instrumentation、反射(Reflection)、版本控制(Versioning)、首选项 API(Preferences API)、引用对象(Ref Objects)、日志(Logging)以及正则表达式(Regular Expressions)
其他基础库包括:Java 管理扩展(JMX)、Java 本地接口(JNI)、数学运算(Math)、网络(Networking)、国际化支持(International Support)、输入 / 输出(I/O)、JavaBeans、Java 覆盖机制(Override Mechanism)、安全(Security)、序列化(Serialization)、扩展机制(Extension Mechanism)以及用于 XML 处理的 Java API(JAXP)
部署技术包括:Java Web Start、部署工具(Deployment)和 Java 插件(Java Plug-in)
Java 开发工具包(JDK)与 Java 运行时环境(JRE)协同工作,共同构建一个稳定可靠的运行环境,使基于 Java 的应用程序能够在任何操作系统上无缝运行。JRE 的运行时架构包含以下核心组件:
字节码验证器(Bytecode Verifier)
Java 类加载器动态加载运行 Java 程序所需的所有类。由于类仅在需要时才被加载到内存中,JRE 会通过 ClassLoader 在必要时自动完成这一过程。在 JVM 初始化阶段,会加载以下三种类加载器:
启动类加载器(Bootstrap Class Loader)
扩展类加载器(Extensions Class Loader)
系统类加载器(System Class Loader)
字节码验证器在字节码交由解释器执行前,会检查其格式和语义是否符合 Java 语言规范。如果代码违反系统完整性或访问权限规则,则该类将被视为损坏,不会被加载
在字节码成功加载后,Java 解释器会创建一个 Java 虚拟机实例,使 Java 程序能够在底层硬件上原生执行
JRE 包含一个 JVM 实例、运行所需的类库,但不包含开发工具(如编译器 javac)——这些工具属于 JDK。为了理解 Java 运行时环境(JRE)的工作机制,我们来看一个简单的 Java 程序示例,它会输出 “Hello World”:
// Java 类
class Hello {
// 主方法(程序入口点)
public static void main(String[] args) {
System.out.println("Hello World");
}
}输出:
Hello World编写完程序后,需将文件保存为 Hello.java(即使用 .java 扩展名)。接着,使用 JDK 中的编译器(javac Hello.java)进行编译。编译成功后,会生成一个名为 Hello.class 的文件,其中包含平台无关的 Java 字节码
该字节码本身不能直接在操作系统上运行,而是由 JRE 中的 JVM 加载并执行。只要目标设备上安装了 JRE,就可以通过以下命令运行程序:
java HelloJVM 负责解释或即时编译(JIT)字节码,并调用 JRE 提供的标准类库(如 System.out.println 所依赖的 I/O 功能),最终在控制台输出结果。这正是 Java 实现“一次编写,到处运行”的核心机制