IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> JVM系列之JDK、JRE、JVM的区别是什么? -> 正文阅读

[Java知识库]JVM系列之JDK、JRE、JVM的区别是什么?

系列博客专栏:

JVM系列之JDK、JRE、JVM的区别是什么?

1、JDK、JRE、JVM的关系

引用oracle官网对JDK的概述,里面很明确指出jdk、jre、jvm的关系,jdk是包括jre的,而jvm是jre是一部分

JDK 8 is a superset of JRE 8, and contains everything that is in JRE 8, plus tools such as the compilers and debuggers necessary for developing applets and applications. JRE 8 provides the libraries, the Java Virtual Machine (JVM), and other components to run applets and applications written in the Java programming language. Note that the JRE includes components not required by the Java SE specification, including both standard and non-standard Java components.

引用官网的图片进行描述:
在这里插入图片描述

2、什么是Java virtual machine(JVM)?

JVM:java virtual machine,java虚拟机是执行 Java 程序的虚拟机的实现,是一个抽象的计算机器。

既然是按照计算机的理论设计的,那就遵循冯诺依曼计算机结构

在这里插入图片描述

JVM运行过程涉及的组件:

  • 类加载器
  • 运行时数据区
  • 执行引擎

引用Oracle官网的图例表示HotSpot JVM的架构设计:如图首先java文件经过javac编译成class类文件,经过类加载器,加载到JVM,再通过执行引擎执行。HotSpot JVM支持高并发和拓展性也很好。

JVM的高性能是由支持并发的垃圾收集器和动态JIT编辑器保证的。HotSpot JVM JIT 编译器在 Java 应用程序运行时做出动态优化决策,并生成针对底层系统架构的高性能本地机器指令
在这里插入图片描述
HotSpot JVM的高移植性, Write Once Run Anywhere:
在这里插入图片描述
ok,现在比较详细介绍HotSpot JVM运行过程需要的3个重要组件类加载器、运行时数据区、执行引擎

2.1、 类加载器

JVM的类加载机制分为五个部分:加载,验证,准备,解析,初始化,如图,详情可以参考我之前的博客
在这里插入图片描述

2.2、运行时数据区

运行时数据区,是java虚拟机定义的在程序执行期间使用的各种运行时的数据区。这些运行时数据区分为两种,一种是在java虚拟机启动时创建,仅在java虚拟机退出时才被销毁,这种可以理解为线程共享的。另外一种是数据区是针对每个线程的,是在创建线程时创建的,并在线程退出时销毁这个数据区,这种可以理解为线程私有的。

在这里插入图片描述
在这里插入图片描述
比较详细的可以参考我之前博客,JVM系列之运行时数据区(Run-Time Data Areas)

2.3、 执行引擎

执行引擎主要有如下3个部分:Interpreter(解释器)、Just-In-Time (JIT) Compiler(即时 (JIT) 编译器)、Garbage Collector(垃圾收集器)

  • Interpreter
    一旦类加载器加载并验证字节码,解释器就会逐行执行字节码,这个过程是比较慢的,一个方法被多次调用时,每次都要执行
  • Just-In-Time (JIT) Compiler
    JVM 自动监视正在执行的方法。一旦一个方法符合 JIT 编译的条件,它就会被JIT编辑器编译成机器代码。这种方法被称为热方法。这个编译过程发生在单独的JVM线程上。编译成机器码后,程序运行速度是更快的。
  • Garbage Collector
    JVM的垃圾收集器主要用于对运行时数据区的内存进行回收整理,保证内存空间的正常使用,比较详细的JVM垃圾回收机制可以参考我之前博客:JVM系列之垃圾回收机制(Garbage Collect)

3、什么是Java Runtime Environment(JRE)?

Java 运行时环境 (JRE) 是一组用于运行 Java 应用程序的软件组件

JRE 的核心组件包括:

  • JVM
  • 运行 Java 程序所需的类
  • 属性文件

JVM上一节已经做了比较详细的描述,所以这里只介绍运行 Java 程序所需的类和属性文件

3.1、运行 Java 程序所需的类

  • Bootstrap 类
    Bootstrap class可以翻译为引导类,放在 jre/lib/路径下面,这里类在Bootstrap ClassLoader启动时候就会被加载

    • rt.jar 运行时类
    • i18n.jar 国际化类
    • charsets.jar 字符转换用
    • 等等
  • extension类
    extension class,也即拓展类,放在jre/lib/ext/路径下面,可以将自定义的jar放在此路径
    包括的类: jfxrt.jar (JavaFX 运行时库)、localedata.jar(包括java.text和java.util)、等等

  • jre/lib/security 安全管理

  • jre/lib/applet 放置小程序支持类的目录

  • jre/lib/fonts 字体相关文件

  • 等等

3.2、 属性文件

属性文件位于/jre/lib/内的不同文件夹中

  • calendar.properties 日历配置
  • logging.properties 日志配置
  • net.properties 中的网络配置
  • /jre/lib/deploy/ 中的部署属性
  • /jre/lib/management/ 中的管理属性
  • 等等

4、什么是Java Development Kit (JDK)?

Java Development Kit (JDK) 提供用于开发、编译、调试和执行 Java 程序的环境和工具。
JDK的核心组件包括:

  • JRE

  • 开发工具
    现在,我们将专注于各种开发工具

  • 基本工具,整理自https://www.baeldung.com/jvm-vs-jre-vs-jdk

    • javac –将java文件编译成class类文件
    • java – 启动 Java 应用程序
    • javadoc – 从 Java 源文件生成 API 文档(HTML 页面)
    • apt – 根据指定源文件集中的注释查找并执行注释处理器
    • appletviewer – 使我们能够在没有 Web 浏览器的情况下运行 Java 小程序
    • jar – 将 Java 小程序或应用程序打包到单个存档中,可以用于运行jar文件
    • jdb – 用于查找和修复 Java 应用程序中的错误的命令行,调试工具
    • javah – 从 Java 类生成 C 头文件和源文件
    • javap – 反汇编class类文件,并显示有关类文件中存在的字段、构造函数和方法的信息
    • extcheck – 检测目标 Java 存档 (JAR) 文件和当前安装的扩展 JAR 文件之间的版本冲突
  • 安全工具
    java是有提供一些安全的授权证书的,Java Keystore 是授权证书或公钥证书的容器。因此,它经常被基于 Java 的应用程序用于加密、身份验证和通过 HTTPS 提供服务。

    • keytool – 加密密钥和证书
    • jarsigner – 使用密钥库信息生成数字签名的 JAR 文件
    • policytool – 管理外部策略配置文件
  • 监控和性能分析

    • jconsole –提供一个图形控制台,让您监控和管理 Java 应用程序
    • jps –列出目标系统上检测的 JVM
    • jstat –监控 JVM 统计信息
    • jstatd –监控已检测的JVM
    • info – 为指定的 Java 进程生成配置信息
    • jmap –打印指定进程的共享对象内存映射或堆内存详细信息
    • jsadebugd –附加到 Java 进程并充当调试服务器
    • jstack –打印Java 堆栈跟踪,栈溢出问题排查
  • 等等

5、附录:参考资料

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-07-06 23:58:32  更:2021-07-06 23:59:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/18 14:31:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码