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

JRE是Java的运行时环境,包括Java类库、类加载器和JVM,确保Java程序的运行。JRE与JVM协同工作,类加载器加载类,JVM负责资源管理。安装JDK时会包含JRE。在devops中,JRE用于Java应用程序的配置和监控,如内存管理和JVM性能调整。
摘要由CSDN通过智能技术生成

本文翻译自 What is the JRE? Introduction to the Java Runtime Environment

JRE创建JVM并确保依赖关系可用于Java程序

在这里插入图片描述

Java开发工具包(JDK),Java虚拟机(JVM)和Java运行时环境(JRE)共同形成了强大的Java平台组件三部曲,用于开发和运行Java应用程序。 之前,我已经介绍了JDK和JVM。 在本快速教程中,您将了解JRE,它是Java的运行时环境。

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

  • 类加载器负责正确加载类并将它们与核心Java类库连接。
  • JVM负责确保Java应用程序具有在设备或云环境中运行和良好运行所需的资源。
  • JRE主要是那些其他组件的容器,并负责协调它们的活动。

在以下各节中,我们将更深入地研究这些组件如何协同工作。

安装JDK, JRE, and JVM
从安装的角度来看,无论何时下载JDK,它都将包含版本兼容的JRE,并且该JRE将包含默认的JVM。
您还可以从JDK单独下载JRE,并且可以从各种JVM中进行选择。 默认值在大多数实现中都能很好地工作,特别是在您开始使用Java时。

什么是运行时环境?

软件程序需要执行,并且需要一个运行环境。运行时环境将加载类文件,并确保可以访问内存和其他系统资源来运行它们。 过去,大多数软件都使用操作系统(OS)作为其运行时环境。 该程序可以在所用的任何计算机上运行,但都依赖于操作系统设置来进行资源访问。 在这种情况下,资源将是诸如内存和程序文件以及相关性之类的东西。 Java Runtime Environment改变了所有这些,至少对于Java程序而言。

最初引入Java时,它的“一次编写,随处运行”的原则被认为具有革命性,但如今,它已被大多数软件系统采用。

Java运行时环境

我们可以将软件视为位于系统硬件之上的一系列层。 每一层都将提供其上一层将使用(和要求)的服务。 Java运行时环境是在计算机操作系统之上运行的软件层,提供特定于Java的附加服务。

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

简而言之,JRE是一种用于Java程序的元OS。 这是一个经典的抽象示例,将底层操作系统抽象到运行Java应用程序的一致平台中。

JRE如何与JVM配合使用

Java虚拟机是运行中的软件系统,负责执行实时Java程序。 JRE是磁盘上的系统,它使用Java代码,将其与必要的库组合在一起,然后启动JVM来执行它。

JRE包含Java程序需要运行的库和软件。 例如,Java类加载器是Java运行时环境的一部分。 这个重要的软件将编译后的Java代码加载到内存中,并将代码连接到适当的Java类库。

在我刚刚描述的分层视图中,JVM是由JRE创建的。 从包的角度来看,JRE包含JVM,如图1所示。
在这里插入图片描述

安装和使用JRE

JRE有一个概念方面,在实际操作中,它只是安装在计算机上的软件,其目的是运行Java程序。 作为开发人员,您将主要使用JDK和JVM,因为这些是用于开发和运行Java程序的平台组件。 作为Java应用程序用户,您将更多地参与JRE,它使您可以运行那些程序。

在大多数情况下,您的计算机将安装Java,并且JRE将包含在其中。 如果确实需要手动安装或升级,则可以从Oracle下载当前的JRE版本。

JRE 版本
Java运行时环境针对Java的每个新版本进行了更新,并且其版本号与Java平台版本控制系统一致,因此,例如,JRE1.8运行Java8。尽管您可以选择各种JDK软件包(例如Enterprise Edition) 或标准版),而JRE并非如此。 大多数计算机运行为Java SE开发的JRE,该JRE能够运行任何Java应用程序,而不管其开发方式如何。 大多数移动设备都随附有Java ME的JRE,该JRE已预安装在移动设备上,无法下载。

安装JRE后,您可以在命令行中输入java -version与之交互,这将告诉您所安装的版本。 在POSIX系统上,您始终可以检查Java的安装位置。

devops中的JRE

JRE在开发阶段不是很引人注目,在J阶段,它仅在您选择的OS或IDE中运行程序。 JRE在开发和系统管理中扮演着更为重要的角色,因为它用于监视和配置。

基本上,JRE提供了用于配置和控制Java应用程序特征的“旋钮”。 内存使用是一个很好的例子,它是系统管理的基础。 尽管内存使用始终很重要,但它在云配置中至关重要,而devops是基于云的技术。 如果您在devops环境中工作,或对分支到devops感兴趣,那么最好了解Java内存的工作方式以及如何在JRE中对其进行监视。

Devops还是sysadmin?
Devops是一个新术语,但它描述了几十年来一直存在的事实,即开发与运营之间的互操作性。
从这个意义上讲,devops只是过去称为操作或系统管理的较新术语。
像sysadmin一样,devops的重要方面是管理执行软件所必需的系统。 管理JRE是管理运行Java应用程序的系统的一部分。

Java内存和JRE

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

  • 元空间是Java保持程序不变信息(例如类定义)的地方。
  • 堆空间是Java保留变量内容的地方。
  • 栈空间是Java存储函数执行和变量引用的地方。

Java 8中的内存管理

在Java 8之前,元空间被称为permgen。 除了名称更酷之外,元空间是开发人员与Java内存空间交互方式的重大变化。 以前,您将使用命令java -XX:MaxPermSize监视permgen空间的大小。 从Java 8开始,Java会自动增加元空间的大小,以适应您程序的元需求。 Java 8还引入了一个新的标志MaxMetaspaceSize,该标志可用于限制元空间的大小。
其他内存选项(堆和栈)在Java 8中保持不变。

配置堆空间

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

配置栈空间

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

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

Java应用程序监控

尽管应用程序监视是JVM的功能,但是JRE提供了配置选项,这是监视的必要基准。 从经典(例如Unix命令顶部)到复杂的远程监视解决方案(例如Oracle的基础结构监视),可以使用各种工具来监视Java应用程序。

在这些选项之间是可视分析器,例如VisualVM,可用于检查正在运行的JVM。 这些工具使您能够跟踪热点和内存泄漏,以及查看系统中的整体内存消耗。

总结

Java运行时环境是一种磁盘程序,它加载Java应用程序以使JVM执行。 下载Java开发工具包时,默认情况下会包含JRE,并且每个JRE都包含核心Java类库,Java类加载器和Java虚拟机。 了解JVM,JDK和JRE的交互方式非常有帮助,尤其是在云和devops环境中工作时。 在这些环境中,与传统的Java应用程序开发相比,JRE在监视和配置中扮演着更重要的角色。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值