2024-12-02    2024-12-06    1586 字  4 分钟

> Hello, Java!

![[assets/Obsidian 调整透明度.png]]

Java 介于编译型语言和解释型语言之间。编译型?解释型?

编译型    ➡️ 源码 → 机器码 → 运行机器码
解释型    ➡️ 源码 → 解释器 → 解释运行源码
Java 呢? ➡️ 源码 → 字节码 → 虚拟机(JVM) → 加载执行字节码

> JDK › JRE › JVM

![[assets/Snipaste_2024-12-03_10-17-36.png|350]]

下面让我们先来看一些名词吧~

一些名词

JVM(Java Virtual Machine) 即 Java 虚拟机,它是 Java 运行的核心基础,提供了运行 Java 字节码文件(.class 文件)的运行环境。

Java 程序在编译后会生成字节码,这些字节码并不能直接被操作系统识别和执行,而是需要依靠 JVM 来进行解释或者编译执行,相当于在不同操作系统和 Java 程序之间搭建起了一座桥梁,使得 Java 实现了 “一次编写,到处运行” 的跨平台特性。

JVM 的主要组成部分是什么?

- 类加载器(Class Loader)» 负责加载字节码文件到 JVM 中
- 运行时数据区(Runtime Data Areas)
  - 方法区(Method Area)» 线程共享,存储已被加载的类信息、常量、静态变量等
  - 堆(Heap)» 线程共享,存放对象实例以及数组等数据
  - 虚拟机栈(JVM Stacks)» 线程私有,存储局部变量表、操作数栈、动态链接、方法出口等信息
  - 本地方法栈(Native Method Stacks)» 执行非 Java 语言编写的方法,如 JNI 调用的 C 方法
  - 程序计数器(Program Counter Register)» 线程私有,记录当前线程执行到的字节码指令的位置
  - 执行引擎(Execution Engine)» 负表执行加载到 JVM 中的字节码指令(解释执行、即时编译 JIT)
- 垃圾回收(Garbage Collection,GC)» JVM 具备自动的垃圾回收机制

JRE(Java Runtime Environment) ,即 Java 运行时环境。它是运行 Java 程序的最小环境需求,是 Java 程序能够在计算机上运行的基础条件。

它由 [[#JVM]] 和 Java 核心类库组成。

想要了解更多吗?请参考 📚 Java API 中文文档

JDK(Java Development Kit) ,即 Java 开发工具包。它是 Java 程序员进行开发的工具集合,不仅包含了 JRE(Java 运行时环境),还提供了一系列的开发工具,用于编写、编译和调试 Java 程序。

- JRE(JVM + Runtime Library)
- 编译器(javac):编译器会检查源代码的语法错误,并将其转换为字节码,以便 JVM 能够执行;
- 调试器(jdb):允许开发人员在程序运行过程中暂停执行,检查变量的值、跟踪方法的调用等;
- Java 文档生成器(javadoc):用于从 Java 源文件中的注释生成 API 文档;
- 其他工具:jar(创建和管理 Java 归档文件)、jps(查看 Java 进程信息)……

:: 虽然多数时候这些都由 IDE 帮助做了,但是了解一下其最本质的流程是非常有必要的。

JSR(Java Specification Requests) 即 Java 规范请求,它是指向 JCP(Java Community Process)提出的对于 Java 平台新增规范或者对现有规范进行改进的请求。

提出请求 JSR(提供 RI 和 TCK)➡️ JCP 审核与评估 ➡️ 制定规范 ➡️ 实现和推广

一个 JSR 规范发布时,为了让大家有个参考,还要同时发布一个“参考实现”(RI - Reference Implementation),以及一个“兼容性测试套件”(TCK - Technology Compatibility Kit)。

RI(Reference Implementation) - 参考实现,是一种对于 Java 技术规范的完整实现示例。它是由 Java 技术规范的制定者或者相关的官方组织提供的,用于展示如何按照规范来构建一个功能完整的软件组件或系统。

例如,对于一个新的 Java API 规范,RI 会展示如何正确地实现接口、处理异常、管理资源等,就像是一份详细的 “参考答案”。

TCK(Technology Compatibility Kit) - 技术兼容性套件,是一套用于测试某个软件实现是否符合特定 Java 技术规范的工具和文档集合。它包含了一系列的测试用例、测试脚本以及测试框架,用于检查被测试的软件在功能、接口、性能等各个方面是否与规范要求一致。

例如,对于一个新的 Java 图形处理 API 规范,TCK 会有测试用例来检查 API 的各种方法是否按照规定的参数和返回值进行工作,图形渲染的结果是否符合预期等。