java从.java文件到机器码

前端编译

主要功能就是把.java代码转换成.class代码,生成.class文件

后端编译

后端编译主要是将中间代码再翻译成机器语言。Java中,这一步骤就是Java虚拟机来执行的。

Alt

词法分析:

左到右一个个字符读入源程序,将字符序列转换为标记序列的过程。

语法分析:

根据标记序列 构造 抽象语法树,用于描述程序语法结构是否正确。

语义分析:

对程序进行逻辑检查,对结构正确的源程序,进行上下文有关性质的审查。其中一个重要部分就是类型检查。

中间代码生成:

将前面各个步骤生成的信息转化成字节码写入.class文件。

后端编译主要是将中间代码再翻译成机器语言。Java中,这一步骤就是Java虚拟机来执行的。

传统的JVM的解释器

解释器是jvm虚拟机的一部分,java默认采用解释器与其中一个编译器直接配合的方式工作,解释器通过解释字节码将其翻译成对应的机器指令,逐条读入,逐条解释翻译。

在部分虚拟机中, Java程序是通过解释器进行解释执行的, 当虚拟机发现某个方法或代码块的运行特别频繁时, 虚拟机采用热点检测,就会把这些代码认定为"热点代码"。为了提高热点代码的执行效率, 在运行时, 虚拟机将会把这些代码编译成与本地平台相关的机器码, 并进行优化, 完成这个任务的编译器称为即时编译器(JIT编译器)。虚拟机在代码编译器还未完成之前, 都仍然将按照解释方式继续执行, 而编译动作则在后台的编译线程中进行。

热点检测

基于采样的热点探测: 虚拟机周期性地检查各个线程的栈顶, 如发现某个方法经常出现在栈顶, 它就是"热点方法"。
基于计数器的热点探测: 虚拟机会为每个方法(甚至是代码块)建立计数器, 统计方法的执行次数, 如果执行次数超过一定的阈值就认为是"热点方法"。

编译优化

JIT除了具有缓存的功能外,还会对代码做各种优化。例如: 锁消除、 锁膨胀、 空值检查消除、 类型检测消除、 公共子表达式消除、 方法内联、逃逸分析。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值