当前位置: 首页 > news >正文

【JVM】编译解释

可以把这部分理解成一句话:

Java 不是单纯的编译型语言,也不是单纯的解释型语言,而是“先编译,再解释,运行中再可能即时编译”的混合型语言。


1. 什么是编译?

编译就是:在程序运行之前,先把源代码整体翻译成机器能直接执行的代码。

比如 C 语言:

hello.c → 编译器编译 → hello.exe

生成的hello.exe就是机器码文件,操作系统可以直接运行。

所以 C 语言通常叫编译型语言

特点是:

源代码 → 机器码 → 直接运行

2. 什么是解释?

解释就是:程序运行时,解释器一边读代码,一边翻译,一边执行。

比如 JavaScript、Python 的常见执行方式:

源代码 → 解释器逐行解释 → 执行

它通常不会提前生成一个真正的机器码可执行文件。

所以解释型语言的特点是:

边翻译,边执行

3. Java 为什么特殊?

Java 的执行过程不是简单的一步。

它大概分成三步:

Java 源代码 ↓ javac 编译 字节码 .class 文件 ↓ JVM 解释执行 机器执行

比如:

Hello.java

先通过javac编译成:

Hello.class

但是注意:

.class文件不是机器码,而是字节码。

机器不能直接执行字节码,必须交给JVM


4. 字节码是什么?

字节码可以理解成一种中间代码

它既不是 Java 源代码,也不是最终的机器码。

Java 源代码:人能看懂 字节码:JVM 能看懂 机器码:CPU 能看懂

Java 这样设计,是为了跨平台。

比如同一份.class文件:

Windows 上的 JVM 可以执行 Linux 上的 JVM 可以执行 Mac 上的 JVM 也可以执行

也就是常说的:

一次编译,到处运行

准确点说是:

一次编译成字节码,只要有对应平台的 JVM,就可以运行

5. JVM 怎么执行字节码?

JVM 执行字节码主要有两种方式:

第一种:解释执行

JVM 的解释器一条一条读取字节码,然后翻译成机器指令执行。

类似:

字节码 → JVM解释器 → 机器码 → CPU执行

这种方式启动快,但是如果某段代码反复执行,每次都解释就比较浪费。


第二种:JIT 即时编译

JVM 在运行过程中会观察代码。

如果发现某个方法或者循环执行得特别频繁,就会认为它是热点代码

比如:

for(inti=0;i<1000000;i++){sum+=i;}

这种循环执行次数很多,JVM 就可能觉得:

这段代码太常用了,别每次解释了,直接编译成机器码吧。

于是 JIT 编译器会把这段热点字节码编译成机器码。

之后再执行这段代码时,就可以直接执行机器码了,速度更快。

流程是:

热点字节码 → JIT编译器 → 机器码 → 直接执行

6. 所以 Java 到底是编译型还是解释型?

严格来说:

Java 同时包含编译和解释。

因为它先有一次编译:

.java → .class

这是编译。

然后运行时 JVM 解释执行字节码:

.class → JVM解释执行

这是解释。

运行过程中,热点代码还会被 JIT 编译成机器码:

热点字节码 → 机器码

这又是编译。

所以 Java 的完整过程可以理解为:

.java 源文件 ↓ javac 编译 .class 字节码 ↓ JVM 解释执行 机器执行 运行过程中: 热点代码 ↓ JIT 即时编译 机器码 ↓ 直接执行

7. AOT 又是什么?

AOT 是Ahead Of Time,提前编译。

它和 JIT 不一样。

JIT 是:

运行时发现热点代码,再编译成机器码

AOT 是:

程序运行前,就提前编译成机器码

所以 AOT 更接近传统编译型语言。

比如:

Java代码/字节码 → AOT编译 → 本地机器码

这样程序启动可能更快,因为不需要运行时再慢慢解释和 JIT 优化。


8. 面试可以怎么说?

可以这样回答:

Java 不能简单地说是编译型语言或者解释型语言,它是编译和解释并存的语言。Java 源代码会先通过 javac 编译成字节码文件,也就是.class文件,这一步属于编译。但字节码不是机器码,不能被 CPU 直接执行,需要交给 JVM 解释执行。在程序运行过程中,如果 JVM 发现某些方法或代码块执行得很频繁,就会通过 JIT 即时编译器把这些热点代码编译成本地机器码,提高执行效率。所以 Java 是一种既有编译过程,也有解释执行,同时还支持 JIT 优化的语言。

再简短一点:

Java 是半编译半解释型语言。先通过 javac 编译成字节码,再由 JVM 解释执行;运行过程中热点代码会被 JIT 编译成机器码直接执行,所以 Java 既有编译,也有解释。

http://www.rkmt.cn/news/1480981.html

相关文章:

  • 2026年6月市场有实力的真空计销售商推荐,氦质谱检漏仪/真空计/真空泵,真空计销售商哪家专业 - 品牌推荐师
  • 精通BambuStudio开发:从源码构建到高级定制实战指南
  • 终极免费字体解决方案:如何用Montserrat字体家族提升你的设计品质
  • 2026年最新:国内泡沫玻璃板/泡沫玻璃管厂家综合实力排行 推荐欧诗德(天津)节能科技有限公司 - 奔跑123
  • 在Windows电脑上3步安装Coolapk UWP桌面版:告别手机小屏幕,享受大屏酷安体验
  • 002-2026年微信小程序怎么做自己的店铺-图文版-2026-06-07 - 凡科杰建云
  • 手把手教你用SimpleUI美化Django Admin:定制Logo、菜单与主题的完整实战
  • 列车通过桥梁时梁体动态响应MATLAB仿真工具包(含动图可视化)
  • FlicFlac:Windows上最轻量的免费音频格式转换神器
  • 终极指南:免费为Mac解锁NTFS完整读写权限
  • 华为云Agentic Infra:企业级AI基础设施新范式的深度解析
  • Windows和Office激活终极指南:3分钟完成永久免费激活的完整解决方案
  • 3分钟解锁AI图像分层:告别繁琐手工,拥抱智能设计新纪元
  • 中国芯片设计业的创新共识:从成本优化到价值创造的演进之路
  • 3分钟掌握百度网盘秒传脚本:永久分享文件的完整终极指南
  • 去中心化区块链上的可验证科学计算:原理与工程实践
  • 2026最新的 边封型热收缩包装机优质生产厂家实力排行盘点 推荐廊坊松瀚机械设备有限公司 - 奔跑123
  • 面向工业大客户的柔性装备共创技术难点
  • 2026衢州装修攻略:不同户型怎么装?刚需、改善、高端家装一站式解答 - 速递信息
  • 干货分享:如何让锁变的更加安全?
  • 2026无锡黄金回收实力榜单:六家经营超八年优选 - 商业快讯早知道
  • 技术笔记:20260607
  • 从扩散模型到多模态融合:AIGC生成范式的演进与未来架构解析
  • openLCA 2.6.2:开源生命周期评估软件的完整使用教程
  • 5个抖音下载能力单元:从单视频到用户主页的完整技术方案
  • ComfyUI IPAdapter Plus深度配置指南:从模型加载到性能调优的完整解决方案
  • 终极指南:如何通过Universal SafetyNet Fix解决Android Root设备完整性认证问题
  • Android设备完整性验证:构建企业级安全防护体系
  • 别再死记硬背了!用‘棋盘与米粒’和‘哈夫曼编码’的故事,5分钟搞懂二叉树为什么这么快(O(log n))
  • 2026无锡跑网约车赚钱秘诀!选滴滴直营正规租车,低门槛高收益 - 速递信息