[5-01-01].第04节:初识字节码文件 - 字节码文件作用

JVM学习大纲


一、字节码文件实现跨平台性:

  • Java虚拟机不和任何语言绑定,它只关心"字节码"文件,它与特定的二进制文件是关联的
  • 无论何种语言,只要编译结是正确的字节码文件,那么这种语言就可以在Java虚拟机上执行

二、前端编译器:

2.1.前端编译器功能:

  • 1.Java的前端编译器的主要任务:负责将符合Java语法规范的Java代码转换为符合JVM规范的字节码文件,前端编译器不属于JVM

  • 2.javac编译器是常见的前端编译器:配置在path环境变量中的javac编译器是一种能够将Java源码编译为字节码的前端编译器

  • 3.Javac编译器在将Java源码编译为一个有效的字节码文件过程中经历了4个步骤,分别是 词法解析、语法解析、语义解析以及生成字节码

  • 4.想要一个Java程序可以正确的在jvm中运行,Java源码必须要被编译为符合JVM规范的字节码

2.2.前端编译器对比:

  • 1.HotSpot VM并没有强制要求前端编译器只能使用javac来编译字节码,其实只要编译结果符合JVM规范都可以被JVM所识别即可
  • 2.在Java的前端编译器领域,除了javac之外,还有内置在Eclipse中的ECJ(Eclipse Compiler for Java)编译器。和Javac的全量式编译不同,ECJ是一种增量式编译器
    • 在Eclipse中,当开发人员编写完代码后,使用"Ctrl+s"快捷键时,ECJ编译器所采取的编译方案:是把未编译部分的源码逐行进行编译,而非每次都全量编译。因此ECJ的编译效率会比javac更加迅速和高效,当然编译质量和javac相比大致还是一样的。
    • ECJ不仅是Eclipse的默认内置前端编译器,在Tomcat中同样也是使用ECJ编译器来编译jsp文件。由于ECJ编译器是采用GPLv2的开源协议进行源代码公开,所以,大家可以登录eclipse官网下载ECJ编译器的源码进行二次开发。·默认情况下,Intellij IDEA使用javac编译器(还可以自己设置为Aspect]编译器ajc)
  • 3.前端编译器并不会直接涉及编译优化等方面的技术,而是将这些具体优化细节移交给HotSpot的JIT编译器负责

三、后端编译器

3.1.后端编译器位置:

3.2.后端编译器功能:

JVM中的后端编译器主要指运行时编译器(JIT编译器),它负责将字节码动态编译为本地机器码,以提升程序执行效率

  • 热点代码检测(HotSpot Detection)
    • 机制:通过计数器(方法调用次数、循环回边次数)或采样监控代码执行频率
    • 目的:识别频繁执行的代码("热点代码"),触发编译优化,避免对冷门代码过度编译。
  • 分层编译(Tiered Compilation)
    • C1(Client Compiler):快速编译,进行简单优化(如方法内联、常量传播),适合短期运行的客户端程序
    • C2(Server Compiler):深度优化(如逃逸分析、循环展开),生成高效机器码,适合长时间运行的服务器应用。
  • 分层策略:
    • 先由C1快速编译,再对热点代码由C2优化,平衡启动性能与长期吞吐量
  • 编译优化技术
    • 方法内联(Method Inlining):消除方法调用开销,合并小方法
    • 逃逸分析(Escape Analysis):若对象未逃逸方法,则优化为栈分配或标量替换,减少GC压力
    • 循环优化:包括循环展开(减少迭代次数)、循环剥离(分离复杂逻辑)等
    • 锁消除(Lock Elision):若锁对象未共享,则移除同步操作
    • 常量折叠(Constant Folding):编译期计算常量表达式
    • 虚方法内联(Virtual Call Inlining):通过类型推断内联多态方法调用

相关推荐
invicinble1 天前
jar包在执行的时候需要关注的细节(提供一个解构jvm问题的视角)
java·jvm·jar
Evan芙1 天前
JVM原理总结
jvm
fei_sun1 天前
【总结】【OS】成组链接法
jvm·数据结构
7ioik1 天前
JVM 核心参数调优清单
jvm
CodeAmaz1 天前
JVM一次完整GC流程详解
java·jvm·gc流程
笃行客从不躺平1 天前
JVM 类加载机制复习
jvm
飞火流星020271 天前
【Arthas工具】使用Trace命令分析Java JVM方法调用链路及耗时
java·jvm·arthas·jvm性能调优·java方法调用链路分析及耗时·jvm实时分析·jvm方法调用实时分析
7ioik1 天前
JVM 调优工具深度指南:从监控到诊断的全流程实战
jvm
喵手1 天前
JVM 基础知识:深入理解 Java 的运行时环境!
java·jvm·jvm基础·java运行环境
WizLC2 天前
【JAVA】JVM类加载器知识笔记
java·jvm·笔记