Java开发工具包(JDK)、Java虚拟机(JVM)和Java运行时环境(JRE)共同构成了Java平台组件开发和运行Java应用程序的强大功能。我之前介绍过JDK和JVM。在这个快速教程中,您将了解JRE,它是Java的运行时环境。
实际上,运行时环境是一种为运行其他软件而设计的软件。作为Java的运行环境,JRE包括Java类库、Java类加载器和Java虚拟机。在这个系统中:
的类加载器是负责正确加载类,并将其与Java核心类库连接。在JVM负责确保Java应用程序,他们需要运行在您的设备或云环境中表现良好的资源。该JRE主要是针对那些其他组件的容器,并负责策划的活动。
什么是运行时环境?
软件需要执行,需要一个运行的环境。运行时环境加载类文件,并确保可以访问内存和其他系统资源来运行它们。过去,大多数软件使用操作系统(OS)作为其运行环境。该程序可以在它所在的任何计算机上运行,但是它依赖于操作系统设置来访问资源。在这种情况下,资源将是内存、程序文件和依赖项。Java运行时环境改变了这一切,至少对于Java程序来说是这样。
Java运行时环境
我们可以认为软件是系统硬件之上的一系列层。每一层都提供将被其上一层使用(和需要)的服务。Java运行时环境是一个运行在计算机操作系统之上的软件层,提供特定于Java的附加服务。
JRE可以平滑操作系统的多样性,保证Java程序无需修改就可以运行在几乎任何操作系统上。它还提供增值服务。自动内存管理是JRE最重要的服务之一,它确保程序员不必手动控制内存的分配和重新分配。
简而言之,JRE是Java程序的元操作系统。它是抽象的典型例子,将底层操作系统抽象为运行Java应用程序的一致平台。
JRE如何与JVM一起工作
Java虚拟机负责执行实时Java程序的运行软件系统。JRE是一个磁盘上的系统,它接收您的Java代码,将其与必要的库相结合,并启动JVM来执行它。
JRE包含Java程序需要运行的库和软件。例如,Java类加载器是Java运行时环境的一部分。这个重要的软件将编译好的Java代码加载到内存中,并将代码连接到适当的Java类库。
在我刚才描述的层次视图中,JVM是由JRE创建的。从包的角度来看,JRE包含JVM,如图1所示。
Java内存和JRE
Java内存由三个组件组成:堆、栈和meta 空(以前称为permgen)。
Metaspace是Java保存程序不变的信息(如类定义)的地方。堆空间是Java保存可变内容的地方。堆栈空间是Java存储函数执行和变量引用的地方。
Java 8中的内存管理
在Java 8之前,元空间被称为permgen。除了是一个更酷的名字,Meta 空是开发人员与Java的内存空交互方式的一个重大改变。以前,您会使用这个命令java -XX:MaxPermSize来监控permgen空之间的大小。从Java 8开始,Java会自动增加meta 空的大小,以满足程序的元需求。Java还引入了一个新的标志MaxMetaspaceSize,可以用来限制meta 空之间的大小。
其他内存选项(堆和栈)在Java 8中保持不变。
配置空房间
Heap 空是Java内存系统中最动态的部分。您可以使用-Xms和-Xmx标志来告诉Java启动堆有多大,以及允许增加多少。知道如何为特定的程序需求调整这些标志是Java中内存管理的一个重要方面。理想的方法是让堆足够大,以便进行最有效的垃圾收集。也就是说,您希望允许程序运行足够的内存,但不希望它超过必要的大小。
在配置空之间
Stack 空是函数调用和变量引用排队的地方。Stack 空是Java编程中第二个最臭名昭著的错误
您可以使用此-Xss开关来配置堆栈起始大小。然后堆栈根据程序的需要动态增长。
Java应用程序监控
尽管应用程序监控是JVM的一项功能,但JRE提供了配置选项,这是监控的必要基准。有许多工具可用于监控Java应用程序,从经典的(如Unix command top)到复杂的远程监控解决方案(如Oracle的基础设施监控)。
在这些选项之间是一个可视化分析器,比如VisualVM,它允许您检查正在运行的JVM。这些工具可以跟踪热点和内存泄漏,并监控系统的整体内存消耗。
结论
Java运行时环境是一个磁盘上的程序,用来加载由JVM执行的Java应用程序。下载Java开发工具包时,默认包含JRE,每个JRE包含核心Java类库、Java类加载器和Java虚拟机。理解JVM、JDK和JRE如何交互是有帮助的,尤其是在云和devops环境中工作时。在这些环境中,与传统的Java应用程序开发相比,JRE在监控和配置方面发挥着更大的作用。
成分股和权重股各自代表什么意思
