服务器与大带宽专家 · 持牌IDC/CDN/ISP服务商
简米科技官网JIANMI TECH
资讯 2026-10-27 简米科技 3,944 字 9 分钟阅读

Java虚拟机JRE是什么?为何Java程序运行离不开它?,JVM和JRE有什么区别

导读JRE是Java运行环境,不是虚拟机本身;它把JVM、核心类库和运行支持文件打包在一起,让编译后的Java程序能在特定操作系统上跑起来,Java程序离不开JRE,因为字节码需要JVM翻译,标准类库和启动器也由JRE提供,先把概念摆正:Java虚拟机JRE是什么很多人把JRE直接叫成“Java虚拟机”,这个说法不……

JRE是Java运行环境,不是虚拟机本身;它把JVM、核心类库和运行支持文件打包在一起,让编译后的Java程序能在特定操作系统上跑起来,Java程序离不开JRE,因为字节码需要JVM翻译,标准类库和启动器也由JRE提供。

先把概念摆正:Java虚拟机JRE是什么

很多人把JRE直接叫成“Java虚拟机”,这个说法不够严谨,JRE的全称是Java Runtime Environment,也就是Java运行环境,它更像一套已经布置好的舞台:JVM是台上的翻译官,核心类库是词典和道具,启动器负责把程序请上台。

用一句话拆开看:

  • JRE = JVM + 核心类库 + 运行支持文件
  • JVM = 执行字节码的虚拟机
  • JDK = JRE + 开发工具

据Oracle官方文档(Java SE文档)说明,JVM负责加载、验证、执行字节码,并管理内存和线程,JRE则把这些执行能力和标准类库组合起来,供已经编译好的Java程序使用。

Java运行环境JRE和JDK有什么区别

这是搜索里很常见的对比问题,实际区别不复杂,关键是看你要“运行”还是“开发”。

对比项 JRE JDK
是否包含JVM 包含 包含
是否包含javac编译工具 不包含 包含
主要用途 运行已编译的Java程序 开发、编译、运行Java程序
典型命令 java -jar app.jar javac Hello.java、java Hello
适合人群 只部署应用的运维或最终用户 开发人员、构建服务器

如果你只拿到一个app.jar,目标机器上通常只需要可用的Java运行时,你要改代码、编译源码,就得用JDK,传统JRE安装包在部分发行版中已经弱化,Java 9模块化以后,很多团队会用jlink从JDK里裁剪出定制运行时,运行环境仍然存在,只是形态变了。

JRE里的JVM到底负责什么

JVM不是把Java代码直接变成CPU指令就完事,它要做一串很具体的工作:

  1. 通过类加载器把.class文件读进内存。
  2. 做字节码验证,防止非法指令破坏运行环境。
  3. 解释执行字节码,热点代码交给JIT编译成本地机器码。
  4. 管理堆、栈、方法区等内存区域。
  5. 执行垃圾回收,回收不再使用的对象。
  6. 调度线程,处理锁和并发。

你可以把.class文件想成一张通用图纸,不同操作系统和CPU像不同工地,JVM就是拿着图纸按当地规则施工的人,没有这个“施工队”,图纸本身跑不起来。

为什么Java程序运行离不开JRE

Java的口号是“一次编写,到处运行”,这句话成立的前提,不是.class文件自己能跑,而是目标机器上有JRE接住它,Java程序从源码到运行,大致走这条路:

  • 开发阶段:javac Hello.java生成Hello.class。
  • 部署阶段:把.class或.jar放到目标机器。
  • 运行阶段:java Hello或java -jar app.jar启动JRE中的JVM。
  • 执行阶段:JVM加载类、验证字节码、调用核心类库、管理内存。

缺了JRE,java命令不存在,JVM不存在,String、集合、IO、网络、时间日期这些标准类库也不完整,程序不是“少个插件”,而是少了整套运行底座。

从.java到.class:字节码需要JRE接力

Java源码编译后得到的是字节码,不是Windows的.exe,也不是Linux的ELF可执行文件,字节码面向JVM这个抽象计算机,JVM再根据当前系统把字节码解释或编译成本地指令。

这条链路带来两个直接结果:

  • 跨平台靠JVM适配:同一份.jar可以在Windows、Linux、macOS上运行,前提是对应平台有兼容的JRE。
  • 运行行为受运行时影响:内存参数、GC策略、字符集、时区、安全策略都由运行环境参与决定。

所以生产环境里,JRE版本和参数配置不是小事。java -Xms512m -Xmx2g -jar app.jar这类命令,本质上是在告诉JRE中的JVM如何分配和管理内存。

电脑安装JRE后怎么运行Java程序

这是很具体的场景问题,假设你手上有一个demo.jar,目标电脑已经装好JRE或可用的Java运行时,可以按下面步骤验证:

  1. 打开命令提示符或终端,执行java -version,能看到版本信息,说明运行时可用。
  2. 执行java -jar demo.jar运行可执行JAR。
  3. 如果程序依赖外部类,使用java -cp "lib/;demo.jar" com.example.Main,Windows用分号,Linux和macOS用冒号。
  4. 需要限制内存时,执行java -Xms256m -Xmx1g -jar demo.jar。
  5. 排查路径问题,Windows执行where java,Linux执行which java和readlink -f $(which java)。

Windows配置环境变量时,常见路径是“系统属性 → 高级 → 环境变量”,把JAVA_HOME指向JDK或运行时根目录,再把%JAVA_HOME%\bin加入Path,Linux可以用update-alternatives --config java切换系统默认Java,Docker场景更直接:FROM eclipse-temurin:21-jre,再把JAR复制进去,用java -jar启动。

真实部署场景:JRE怎么选、怎么配、怎么省钱

到了企业环境,JRE不只是“装一个软件”,它涉及版本生命周期、补丁、兼容性、合规和成本,业内专家指出,企业选JRE时应优先看补丁周期和与中间件的兼容性,而不是只盯版本号。

北京企业部署Java项目时JRE怎么选

北京企业部署Java项目,常见选择可以按场景拆:

  • 云上部署:优先选云厂商维护的OpenJDK镜像或JRE基础镜像,补丁更新更省心。
  • 内网离线环境:准备可验证的运行时压缩包,固定JAVA_HOME,用java -version和启动脚本做验收。
  • 国产化操作系统适配:先确认中间件、数据库驱动和JRE发行版的兼容清单,再做压测。
  • 多项目共用服务器:用容器隔离运行时,避免一个项目的JRE参数影响另一个项目。
  • 长期运行服务:优先LTS版本,如Java 21,并建立补丁窗口。

行业共识认为,OpenJDK发行版在多数通用业务场景可以满足需求,商用支持按需购买,这里的关键不是“免费还是收费”二选一,而是把支持责任、补丁来源和合规要求写清楚。

商用JRE授权费用一般多少钱

商用JRE授权费用没有统一价,不同厂商会按处理器或核心数、用户数、支持级别、部署环境和合同周期报价,Oracle JDK的商用授权需要以Oracle官方报价和合同为准,多数团队会评估Eclipse Temurin、Amazon Corretto、Microsoft Build of OpenJDK等OpenJDK发行版,再决定是否购买商业支持。

实操上建议做三件事:

  1. 盘点生产环境Java进程数量:ps -ef | grep java。
  2. 记录每个进程的运行时来源和版本:java -version、readlink -f $(which java)。
  3. 把“免费使用”和“商业支持”分开评估,避免把授权成本和运维成本混在一起。

Windows和Linux下JRE环境怎么验证

部署前别只看安装成功提示,直接验证更可靠。

Windows检查清单:

  • java -version是否能输出版本。
  • echo %JAVA_HOME%是否指向正确目录。
  • where java是否命中预期路径。
  • 用java -jar app.jar跑一次最小启动。

Linux检查清单:

  • which java和readlink -f $(which java)确认实际运行时。
  • update-alternatives --config java检查多版本切换。
  • java -XshowSettings:properties -version查看java.home、字符集等属性。
  • 用jlink --add-modules java.base,java.logging --output myjre生成裁剪运行时,前提是使用JDK操作。

把JRE看成Java程序的运行底座,比把它简单叫成虚拟机更准确,选对、配好、管住补丁,Java应用才能稳定跑在目标系统上。

关于Java虚拟机JRE的常见问答

JRE和JVM是一回事吗?

不是,JVM是JRE中的执行引擎,负责加载、验证和执行字节码,JRE还包含核心类库和运行支持文件,把JRE叫成Java虚拟机,会漏掉类库和启动环境这部分。

只安装JRE能编译Java代码吗?

不能,编译源码需要javac等开发工具,这些工具在JDK里,只安装JRE适合运行已经编译好的.jar或.class,要编译、打包、调试源码,应安装JDK。

Java程序提示“找不到或无法加载主类”先查什么?

先执行java -version确认运行时可用,再用java -cp ... 主类或java -jar app.jar核对类路径和主类配置,模块化应用还要检查--module-path和主模块名称,错误信息消失或定位到具体缺失类,说明排查完成。

分享本文
本文为 简米科技官网 原创,已由运维技术专家审核。转载请注明来源:原文链接
售前咨询 服务热线 售后 邮箱