JVM学习-Class文件结构①

字节码文件的跨平台性
Java语言:跨平台的语言(Write Once,Run Anywhere)
  • 当Java源代码编译成字节码后,如果想在不同平台上运行,则无须再次编译
  • 这上优势不再那么吸引人,Python,PHP,Ruby,Lisp等有强大的解释器
  • 跨平台似乎已经成为一门语言必选的特性
Java虚拟机:跨语言的平台
  • Java虚拟机不和包括Java在内的任何语言绑定,它只与“Class文件”这种特定的二进制格式文件关联,无论使用何种语言进行软件开发,只要能将源文件编译成正确的Class文件,那么这种语言就可以在Java虚拟机上执行,统一而强大的Class文件结构,是Java虚拟机的基石和桥梁。请添加图片描述
  • 所有的JVM全部遵守Java虚拟机规范,字节码文件可以在各种JVM上执行
前端编译器
  • 负责将符合Java语法规范的Java代码编译成符合JVM规范的字节码
  • javac是最常用的前端编译器
  • javac编译器将Java源码编译为一个有效的字节码文件过程经历4步,分别是词法分析、语法分析、语义解析以及生成字节码
    请添加图片描述
Oracle JDK软件包括两部分内容
  • 一部分将Java源代码编译成Java虚拟机的指令集的编译器
  • 另一部分是用于实现Java虚拟机的运行时环境
public class IntegerTest {
   
   
    public static void main(String[] args) {
   
   
        Integer x = 5;
        int y = 5;
        System.out.println(x == y);

        Integer i1 = 5;
        Integer i2 = 5;
        System.out.println(i1 == i2);

        Integer i3 = 128;
        Integer i4 = 128;
        System.out.println(i3 == i4);
    }
}
//执行结果
true
true
false
//查看字节码
 0 iconst_5
 1 invokestatic #2 <java/lang/Integer.valueOf>   //给Integer x进行赋值
 4 astore_1
 5 iconst_5
 6 istore_2
 7 getstatic #3 <java/lang/System.out>
10 aload_1
11 invokevirtual #4 <java/lang/Integer.intValue>  //对Integer x进行拆箱操作
14 iload_2
15 if_icmpne 22 (+7)
18 iconst_1
19 goto 23 (+4)
22 iconst_0
23 invokevirtual #
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值