c++获取机器码的代码_JVM_3_程序编译与代码优化

本文介绍了Java编译器的分类,包括前端编译器Javac和ECJ,后端JIT编译器如HotSpot的C1和C2,以及AOT编译器GCJ。详细探讨了Java语法糖的编译优化,如默认构造器、自动拆装箱等,并深入解析了JVM的运行期优化,特别是JIT编译器的工作原理,如解释器和编译器的协同工作,以及分层编译的概念。文章还提及了方法内联和逃逸分析等优化技术。
摘要由CSDN通过智能技术生成

1. 编译器

1.1 分类及说明

  • 前端编译器把*.java文件转变为*.class文件
    • Javac、ECJ
  • 后端运行期编译器(JIT编译器)把字节码(*.class文件)转变为机器码
    • HotSpot的C1、C2
  • 静态提前编译器(AOT编译器)把*.java文件编译成本地机器代码
    • GCJ

2. Java语法糖(编译器优化)

6841a9dbe91a13832e569c1cd92627a2.png
语法糖

2.1 默认构造器

public class Candy{
     
}

编译成class后的代码:

public class Candy{
     
    //这个无参构造是编译器加上的
    public Candy(){
        super(); //调用父类Object的无参构造方法
    }
}

2.2 自动拆装箱

public class Candy{
     
    public static void main(String[] args){
        Integer x = 1;
        int y = x;
    }
}

编译成class后的代码:

public class Candy{
     
    public static void main(String[] args){
        Integer x = Integer.valueOf(1); //编译器自动装箱
        int y = x.intValue(); //编译器自动拆箱
    }
}

2.3 泛型集合取值

public class Candy{
     
    public static void main(String[] args){
        List list = enw ArrayList<>();
        list.add(10); //实际调用的是 list.add(Object o)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值