深入理解Java虚拟机——魔数与Class文件的版本

x33g5p2x  于2022-02-22 转载在 Java  
字(1.2k)|赞(0)|评价(0)|浏览(286)

一、魔数

1.1、魔数的概述

  • 每个Class文件的头4个字节称为魔数。
  • Class文件的魔数的获得很有“浪漫气息”,值为0xCAFEBABE(咖啡宝贝?),这个魔数值在Java还称做“Oak”语言的时候(大约是1991年前后)就已经确定下来了。

1.2、魔数的作用

  • 确定这个文件是否为一个能被虚拟机接收的Class文件。

1.3、版本号

  • 紧接着魔数的4个字节存储的是Class文件的版本号:第5和第6个字节是次版本号(minor Version),第7和第8个字节是主版本号(Major Version)。
  • Java的版本号是从45开始的,JDK1.1之后的每个JDK大版本发布主版本号向上加1。
  • 最新的JDK1.7,可生成的Class文件主版本号最大值是51.0。
  • JDK1.1到JDK1.7,主流JDK版本编译器输出的默认和支持的Class文件版本号如下表:
译器版本-target参数十六进制版本号十进制版本号
JDK1.1.8不能带target参数00 03 00 2D45.3
JDK1.2.2不带(默认为 -target 1.1)00 03 002D45.3
JDK1.2.2-target 1.200 00 002E46.0
JDK1.3.1_19不带(默认为 -target 1.1)00 03 00 2D45.3
JDK1.3.1_19-target 1.300 00 00 2F47.0
JDK1.4.2_10不带(默认为 -target 1.200 00 00 2E46.0
JDK1.4.2_10-target 1.400 00 00 3048.0
JDK1.5.0_11不带(默认为 -target 1.500 00 00 3149.0
JDK1.5.0_11-target 1.4 -source 1.400 00 00 3048.0
JDK1.6.0_01不带(默认为 -target 1.600 00 00 3250.0
JDK1.6.0_01-target 1.500 00 00 3149.0
JDK1.6.0_01-target 1.4 -source 1.400 00 00 3048.0
JDK1.7.0不带(默认为 -target 1.700 00 00 3351.0
JDK1.7.0-target 1.600 00 00 3250.0
JDK1.7.0-target 1.4 -source 1.400 00 00 3048.0

二、通过Binary Viewer工具查看编译后的Class文件

2.1、Binary Viewer工具的下载与安装

  • 参考lz此博文链接:https://wwwxz.blog.csdn.net/article/details/107087958

2.2、Binary Viewer工具查看编译后的Class文件

  • 代码
public class Test2 {
    public static void main(String[] args) {
        System.out.println("hello world");
    }
}
  • 查看编译后的class文件

相关文章