• 如何查看 class 文件的编译器版本


    在平时的 Java 开发中,有时候我们需要知道某个 class 文件是由哪个版本的 Java 编译器编译生成的

    原理分析

    class 文件,即字节码文件,它有特定的二进制格式,这种格式是由 JVM 规范规定的,不受特定硬件或操作系统的影响。
    字节码文件的二进制格式主要有如下部分:

    1. magic number(魔数):开头4个字节,始终为 CAFE BABE
    2. version(版本号):接下来4个字节表示 Java 的版本。其中,前2个字节是 minor version(次版本号),后2个字节是 major version(主版本号);

    所以,可以通过查看 class 文件的 major version 来确定其对应的编译器版本。

    解决方案

    实际上,任何可以查看二进制格式文件的软件(文本编辑器等),都可以帮助我们确定 class 文件对应的 Java 编译器版本。这里抛砖引玉,借助 Visual Studio Code 的一款叫 Hex Editor 的插件来确定。

    打开 Visual Studio Code,点击“插件”图标,搜索并安装插件 Hex Editor
    Visual Studio Code 搜索插件 Hex Editor
    Hex Editor

    使用 Hex Editor 打开对应的 class 文件,查看文件第一行的索引号为 06 及 07 这两个字节(这里为 00 32),得到对应的 major version
    App.class

    然后通过 Java 版本对照表,即可知道 class 文件是由哪个版本的 Java 编译器编译生成的了(比如上面示例的 class 文件对应编译器版本为 JDK 6)

    Java JDKmajor version(十进制)major version(十六进制)
    18620x3e
    17610x3d
    16600x3c
    15590x3b
    14580x3a
    13570x39
    12560x38
    11550x37
    10540x36
    9530x35
    8520x34
    7510x33
    6500x32
    5490x31
    1.4480x30
    1.3470x2f
    1.2460x2e
    1.1450x2d

    其它解决方案

    javap 命令行工具

    javap,Java class file disassembler,Java 类文件反汇编器,它是 JDK 附带的一个命令行工具,用于反编译和显示 Java 字节码文件的详细信息,通过该工具也可以确定 class 文件对应的 Java 编译器版本。

    javap -verbose App.class
    
    
    • 1
    • 2

    javap -verbose

  • 相关阅读:
    Java统计指定目录下文件夹数量和内部文件的数量并导出
    Kafka MQ broker和集群
    免费享受企业级安全:雷池社区版WAF,高效专业的Web安全的方案
    OpenWrt安装配置Tailscale
    【 Tkinter界面-练习05】 event和bind
    个推微服务网关架构实践详解
    “互联网+”时代,3D全景营销打造千人千面营销点
    js new Date实例化种类
    【初识JavaScript-03】
    JAVA练习百题之数组插入元素
  • 原文地址:https://blog.csdn.net/u012815136/article/details/134487426