编译型语言 && 解释型语言
# 编译型 [ C C++ Swift ]
- 编译: 使用专门的编译器,针对特定的操作系统 将高级语言源代码 一次性翻译成 该平台可使用的机器码[机器指令 操作数]
- 编译生成的可执行程序 可以脱离开发环境 运行效率高
- 翻译对象为特定平台 SO 可执行程序 不可进行跨平台操作 需要重新编译
- 链接操作: 组装两个以上的目标代码模块 生成最终的可执行程序 【代码复用】
# 解释型 [JavaScript Ruby Python]
- 使用专门的解释器 对源程序 逐行解释成特定平台的机器码 且 立即执行
- BAD: 运行效率低 不可脱离解释器独立运行
- GOOD: 跨平台容易 提供特定平台的解释器即可
# Java 先编译 后解释
- Java源文件 *.java ---[javac编译]---> *.class ---[java解释执行]---> 机器码
- *.class:与平台无关的字节码
----------------------------------------------------
JVM JRE JDK
# JVM [Java Virtual Machine] java虚拟机
- 作用:解释执行字节码文件 [使相同的字节码 通过转换器 在不同的平台上运行]
- 特点:向编译器提供相同的编程接口。编译器只需要面向虚拟机,生成虚拟机理解得代码即可
不同平台提供不同的JVM
- 抽象计算机功能:具有指令集 使用不同的存储区域。 负责执行指令 以及管理数据、内存and寄存器
# JDK [Java SE Developmet Kit] Java标准版开发包
- 内容:提供编译、运行java程序锁需要的各种工具和资源
包含java编译器、java运行时环境以及常用java类库
# JRE [Java Runtime Environment] java运行时环境
- JRE 包含 JVM 还包含其他环境支持
- 运行java程序不仅需要虚拟机,还需要其它加载器、字节码校验器
- 只运行程序 --> 可以只安装JRE 无需安装java