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

相关推荐
Derek_Smart1 天前
从一次 OOM 事故说起:打造生产级的 JVM 健康检查组件
java·jvm·spring boot
大道至简Edward1 天前
深入 JVM 核心:一文读懂 Class 文件结构(附 Hex 实战解析)
jvm
weisian1515 天前
JVM--20-面试题6:如何判断对象可以被垃圾回收?
jvm·可达性算法
蚊子码农5 天前
每日一题--JVM线程分析与死锁排查
jvm
xuxie995 天前
NEXT 1 进程2
java·开发语言·jvm
weisian1515 天前
JVM--19-面试题5:说说JVM的类加载机制和双亲委派模型
jvm·双亲委派模型·jvm类加载机制
亓才孓5 天前
【反射机制】
java·javascript·jvm
Volunteer Technology5 天前
JVM之性能优化
jvm·python·性能优化
Andy Dennis5 天前
Java语法注意事项
java·开发语言·jvm
坚持的小马5 天前
JVM相关笔记-jps
jvm·笔记