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

Posted 小志的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入理解Java虚拟机——魔数与Class文件的版本相关的知识,希望对你有一定的参考价值。

目录

一、魔数

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工具的下载与安装

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

  • 代码

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

以上是关于深入理解Java虚拟机——魔数与Class文件的版本的主要内容,如果未能解决你的问题,请参考以下文章

深入理解JAVA虚拟机 虚拟机执行子系统

JVM虚拟机---深入理解Class中访问标志类索引父类索引接口索引

Java虚拟机-类文件结构

魔数与Class 文件的版本

《深入理解java虚拟机》-类文件结构

深入了解Java虚拟机类文件结构