[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):通过类型推断内联多态方法调用

相关推荐
找不到、了6 小时前
JVM核心知识整理《1》
jvm
L.EscaRC8 小时前
面向 Spring Boot 的 JVM 深度解析
jvm·spring boot·后端
学到头秃的suhian1 天前
JVM-类加载机制
java·jvm
NEFU AB-IN1 天前
Prompt Gen Desktop 管理和迭代你的 Prompt!
java·jvm·prompt
唐古乌梁海2 天前
【Java】JVM 内存区域划分
java·开发语言·jvm
众俗2 天前
JVM整理
jvm
echoyu.2 天前
java源代码、字节码、jvm、jit、aot的关系
java·开发语言·jvm·八股
代码栈上的思考2 天前
JVM中内存管理的策略
java·jvm
thginWalker2 天前
深入浅出 Java 虚拟机之进阶部分
jvm