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

相关推荐
打工人你好1 天前
如何设计更安全的 VIP 权限体系
java·jvm·安全
unclecss1 天前
把 Spring Boot 的启动时间从 3 秒打到 30 毫秒,内存砍掉 80%,让 Java 在 Serverless 时代横着走
java·jvm·spring boot·serverless·graalvm
q***2511 天前
java进阶1——JVM
java·开发语言·jvm
zlpzlpzyd1 天前
jvm 偏向锁禁用以及移除
jvm
while(1){yan}1 天前
线程的状态
java·开发语言·jvm
20岁30年经验的码农1 天前
Java JVM 技术详解
java·jvm·压力测试
1***81531 天前
C在游戏中的场景管理
java·jvm·游戏
上78将1 天前
jvm的基本结构
jvm
Tan_Ying_Y1 天前
JVM内存结构———他的底层完整结构
jvm
张人玉1 天前
SQLite语法知识和使用实例
jvm·oracle·sqlite