什么是JDK?什么是JRE?什么是JVM?它们有啥联系+区别?

1、JDK、JRE、JVM的关系

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

引用官网的图片进行描述:

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虚拟机退出时才被销毁,这种可以理解为线程共享的。另外一种是数据区是针对每个线程的,是在创建线程时创建的,并在线程退出时销毁这个数据区,这种可以理解为线程私有的。

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的垃圾收集器主要用于对运行时数据区的内存进行回收整理,保证内存空间的正常使用

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 堆栈跟踪,栈溢出问题排查

发表回复

相关推荐

会计必看| 7套财务管理模板,开箱即用!含合同、代理记账、报销、预算申请、财务分析报表、台账管理…

财务管理对于不了解的人来说就是管钱,但财务管理其实关乎著企业的兴衰。

· 11分钟前

射电望远镜的原理

一、射电望远镜概述 射电望远镜是指观测和研究来自天体的射电波的基本设备,可以测量天体射电的强度、 频谱及偏振等量 。包 ...

· 11分钟前

手机换屏,不知道这些知识你就亏大了!

现在的手机屏幕越做越大,当然屏幕坏了维修成本也就越来越高。而屏幕损坏常见的两种情况,一种是外屏碎裂,液晶屏和触摸功能 ...

· 12分钟前

丧尸横行的大学——该怎么拯救你

各位如果看过《生化危机》那么对生化危机里面的丧尸一定并不陌生,那些张牙舞爪、见人就咬的丧尸简直是我们同年的噩梦,但是 ...

· 14分钟前

包装印前软件中的重要功能:拼版(盒形拼版、CAD拼版、交互式拼版、无缝拼版)与智能标记(拼版软件)

包装盒在经过陷印、油墨处理等初期工作后,需要经过拼版处理来将各个盒型拼在合适的大版上,以便于后续印刷工作的顺利进行。 ...

· 16分钟前