什么是 JRE? Java运行时环境简介

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(386)   2023-06-26 07:54:18

Java 开发工具包 (JDK)、Java 虚拟机 (JVM) 和 Java 运行时环境 (JRE) 共同构成了 Java 和 雅加达 EE 平台组件的强大三重奏,用于开发和运行 Java 应用程序.它们一起工作,让开发人员构建和运行 Java 程序。我已经之前介绍过 JDK虚拟机。 在这个快速概述中,您将了解 JRE,它是 Java 的运行时环境。

实际上,运行环境 是一种旨在运行其他软件的软件。 JRE 作为Java 的运行环境,包含Java 类库、Java 类加载器和Java 虚拟机。在这个系统中:

  • 类加载器 负责正确加载类并将它们与核心 Java 类库连接。
  • 虚拟机 负责确保 Java 应用程序拥有在您的设备或云环境中正常运行和执行所需的资源。
  • JRE 主要是那些其他组件的容器,并负责编排它们的活动。

在接下来的讨论中,我们将更深入地探讨这些组件如何协同工作。

什么是运行时环境?

一个软件程序需要执行,而要执行,就需要一个运行环境。过去,大多数软件都使用操作系统(OS)作为运行环境。该程序在其所在的任何计算机内运行,并直接依赖于操作系统设置来访问资源;内存、磁盘访问和网络访问等资源。 Java 运行时环境改变了这一切,至少对于 Java 程序而言。对于 Java 和其他基于 JVM 的语言,JRE 在操作系统和实际程序之间创建了一个中介。 JRE 加载类文件并启动虚拟机 (JVM),以确保可以跨多个操作系统以一致的形式访问内存和其他系统资源。

Java 运行时环境

我们可以将软件视为位于系统硬件之上的一系列层。每一层都提供将由其上层使用(和需要)的服务。 Java 运行时环境产生了一个 JVM,它是一个运行在计算机操作系统之上的软件层,提供特定于 Java 的附加服务。图 1 说明了这种安排。

jre diagram

JRE 平滑了操作系统的多样性,确保 Java 程序可以在几乎任何操作系统上运行而无需修改。它还提供增值服务。自动内存管理是 JRE 最重要的服务之一,确保程序员不必手动控制内存的分配和重新分配。

简而言之,JRE 是 Java 的一种元操作系统,以及其他 JVM 语言,如 Scala 和 Groovy。这是 抽像 的经典示例,将底层操作系统抽象为一致的平台以运行 Java 应用程序。

JRE 如何与 JVM 一起工作

Java 虚拟机是负责执行实时 Java 程序的运行软件系统。 JRE 是磁盘上的软件组件,它获取已编译的 Java 代码(代码是使用 JDK 编译的),将其与所需的库组合,并启动 JVM 来执行它。

JRE 包含您的 Java 程序需要运行的库和软件。例如,Java 类加载器是 JRE 的一部分。这个重要的软件将已编译的 Java 代码加载到内存中,并将代码连接到适当的 Java 类库(称为 链接 的过程)。

在我刚才描述的分层视图中,JVM 是由 JRE 创建的。从包的角度来看,JRE 包含 JVM,如图 2 所示。JVM 是 JRE 的一部分——它是 JRE 创建的用于托管程序的活动、运行部分。 JRE 获取静态资产并将它们转变为托管正在运行的程序的正在运行的 JVM。

jw whatisjre fig1

安装和使用 JRE

虽然 JRE 有概念性的一面,但在现实世界中,它只是安装在计算机上的软件,其目的是运行您的 Java 程序。作为开发人员,您将主要使用 JDK 和 JVM,因为它们是您用来开发和运行 Java 程序的平台组件。作为 Java 应用程序用户,您会更多地参与 JRE,它允许您运行这些程序。

Java 9 重新构建了 Java 平台,因此 JRE 现在仅作为 JDK 的一部分提供。当您想要发布消费者应用程序时,您可以使用 捷联 发布与您的应用程序捆绑在一起的 JRE。这样的包包含运行程序所需的所有组件。出于我们的目的,我们将在 JDK 中使用 JRE。您可以为您的系统下载最新的 JDK 来自 Oracle 的 Java SE 页面。 Windows 和 macOS 有自动安装程序来管理细节(比如设置路径)。在 Linux 上,一个不错的选择是使用 SDK人。在任何情况下,您都希望从命令行获得 JRE,以便您可以使用 java 命令。

JRE 的版本

Java 运行时环境针对每个新版本的 Java 进行更新,其版本号与 Java 平台版本控制系统一致,因此例如 JRE 1.19 运行 Java 19

许多计算机运行为 Java SE 开发的 JRE,它能够运行任何 Java 应用程序,无论它是如何开发的。大多数移动设备都带有用于 Java ME 的 JRE,它已预安装在移动设备上,无法下载。展望未来,应用程序通过 JLink 与自己的 JRE 捆绑在一起将成为常态。

下载 JDK 后,您可以通过键入 java -version 在命令行中与包含的 JRE 交互,这将告诉您安装的版本。 (在 POSIX 系统上,您始终可以使用命令 which java 检查安装位置。)

devops 中的 JRE

JRE 在开发阶段不是很引人注目,它主要只是在您选择的操作系统或 IDE 中运行您的程序。它在 devops 和系统管理中扮演的角色稍微突出一些,因为 JRE 用于监控和配置。

基本上,JRE 提供了您可以用来配置和控制 Java 应用程序特性的“旋钮”。内存使用是一个典型的例子,是系统管理的基础。虽然内存使用总是很重要,但它在云配置中至关重要,而 devops 是一种基于云的构建和运行软件的方法。如果您在 devops 环境中工作,或者有兴趣扩展到 devops,那么最好了解 Java 内存的工作原理以及它在 JRE 中的监控方式。

Java 内存和 JRE

Java 内存由三个部分组成:堆、栈和元空间(以前称为 permgen)。

  • 元空间 是 Java 保存程序不变信息(如类定义)的地方。
  • 堆空间 is where Java keeps variable content.
  • 堆栈空间 is where Java stores function execution and variable references.

自 Java 8 以来的 Java 内存管理

在 Java 8 之前,元空间被称为永恒物。元空间除了是一个更酷的名字外,还对开发人员与 Java 内存空间交互的方式进行了重大改变。以前,您会使用命令 java -XX:MaxPermSize 来监视 permgen 空间的大小。从 Java 8 开始,Java 会自动增加元空间的大小以满足程序的元需求。 Java 8 还引入了一个新标志 MaxMetaspaceSize,您可以使用它来限制元空间大小。

配置堆空间

堆空间 是 Java 内存系统中最动态的部分。您可以使用 -Xms-Xmx 标志来告诉 Java 启动堆有多大,以及允许它变成多大.了解如何根据特定程序需要调整这些标志是 Java 内存管理的一个重要方面。理想的是使堆足够大以实现最有效的垃圾收集。也就是说,您希望有足够的内存让程序运行,但您不希望它比必要的更大。

配置栈空间

堆垛空间 是函数调用和变量引用排队的地方。堆栈空间是第二臭名昭著的 Java 中的异常 编程的来源:堆栈溢出错(第一个是空间指针异常). 堆垛涌出异常 表示您已用完堆栈空间,因为已保留了太多堆栈空间。通常,当一个或多个方法以循环方式相互调用时,您会遇到堆栈溢出,从而将越来越多的函数调用投入到堆栈中。

您使用 -Xss 开关来配置堆栈起始大小。然后堆栈根据程序的需要动态增长。

Java应用监控

尽管应用程序监控是 JVM 的一项功能,但 JRE 提供了配置选项,这是监控的必要基线。有多种工具可用于监视 Java 应用程序,从经典工具(如 Unix 命令 top)到复杂的远程监视解决方案(如 Oracle 的基础设施监视)。

在这些选项之间是可视化分析器,例如 虚拟机,它允许检查正在运行的 JVM。这些工具可以跟踪热点和内存泄漏,以及观察系统中的整体内存消耗。

结论

Java 运行时环境是磁盘上的程序,它加载 Java 应用程序供 JVM 执行。下载 JDK 时默认包含一个 JRE,每个 JRE 包含核心 Java 类库、Java 类加载器和 JVM。了解 JVM、JDK 和 JRE 如何交互很有帮助,特别是对于在云和 devops 环境中工作。在这些环境中,与在传统 Java 应用程序开发中相比,JRE 在监视和配置方面扮演着更重要的角色。

地址:https://www.cundage.com/article/3304858-what-is-the-jre-introduction-to-the-java-runtime-environment.html

相关阅读

基础设施即代码 vendor 缅甸语 is adding support for 爪哇 and YAML, as it looks to allow software developers to...
Java Development Kit (JDK) 是 Java 编程中使用的三个核心技术包之一,另外两个是 JVM(Java 虚拟机)和 JRE(Java 运行时环境)。区分这三种技术并了解...
当应用程序开发人员或架构师的任务是探索容器化应用程序提供的可能性时,没有什么比红帽容器开发套件 (CDK) 更容易了。 Red Hat CDK 拥有本地 OSX、Linux 或 Windows ...
A couple of weeks ago an anonymous Twitter account told the story of 一个几乎被遗忘的微软愚人节恶作剧, the 1996 s...
JetBrains has launched the Qodana code quality monitoring platform. Qodana integrates with the Je...
Jakarta EE 10, the latest version of the Eclipse Foundation 的企业 Java 平台, arrives today, emphasizi...
Java 开发工具包 (JDK)、Java 虚拟机 (JVM) 和 Java 运行时环境 (JRE) 共同构成了 Java 和 雅加达 EE 平台组件的强大三重奏,用于开发和运行 Java 应用...
Despite the 对软件工程专业人员的不懈需求 before and throughout the global pandemic, entry-level and college-gra...
Java 20 或 Java Development Kit (JDK) 20 是标准 Java 的下一个计划版本,现已功能齐全。正式标记为发布的六个功能处于孵化或预览阶段。这些包括作用域值、记...
Apache Pulsar 是一个开源分布式发布-订阅消息传递系统,最初由 Yahoo 创建,是 Apache Software Foundation 的一部分。