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