目录

  • 一、魔数
    • 1.1、魔数的概述
    • 1.2、魔数的作用
    • 1.3、版本号
  • 二、通过Binary Viewer工具查看编译后的Class文件
    • 2.1、Binary Viewer工具的下载与安装
    • 2.2、Binary Viewer工具查看编译后的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 2D 45.3
    JDK1.2.2 不带(默认为 -target 1.1) 00 03 002D 45.3
    JDK1.2.2 -target 1.2 00 00 002E 46.0
    JDK1.3.1_19 不带(默认为 -target 1.1) 00 03 00 2D 45.3
    JDK1.3.1_19 -target 1.3 00 00 00 2F 47.0
    JDK1.4.2_10 不带(默认为 -target 1.2 00 00 00 2E 46.0
    JDK1.4.2_10 -target 1.4 00 00 00 30 48.0
    JDK1.5.0_11 不带(默认为 -target 1.5 00 00 00 31 49.0
    JDK1.5.0_11 -target 1.4 -source 1.4 00 00 00 30 48.0
    JDK1.6.0_01 不带(默认为 -target 1.6 00 00 00 32 50.0
    JDK1.6.0_01 -target 1.5 00 00 00 31 49.0
    JDK1.6.0_01 -target 1.4 -source 1.4 00 00 00 30 48.0
    JDK1.7.0 不带(默认为 -target 1.7 00 00 00 33 51.0
    JDK1.7.0 -target 1.6 00 00 00 32 50.0
    JDK1.7.0 -target 1.4 -source 1.4 00 00 00 30 48.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文件

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

  1. 深入理解Java虚拟机--中

    深入理解Java虚拟机--中 第6章 类文件结构 6.2 无关性的基石 无关性的基石:有许多可以运行在各种不同平台上的虚拟机,这些虚拟机都可以载入和执行同一种平台无关的字节码(ByteCode),从而 ...

  2. 《深入理解Java虚拟机》-周志明(转)

    (转载):如果文章有错误,欢迎评论或私信指出,谢谢~ https://blog.csdn.net/Yano_nankai/article/details/50957578 本文固定链接:https:/ ...

  3. 深入理解java虚拟机脑图文档

    二.内存区域和内存溢出 运行时数据区域 程序计算器 线程私有,当前线程锁执行的字节码的行号指示器,不会出现OOM. java虚拟机栈 概念: 线程私有,java方法执行的线程内存模型,每个方法呗执行时 ...

  4. 《深入理解Java虚拟机》知识点目录

    深入理解Java虚拟机 第二章 Java内存区域与内存溢出异常 2.2 运行时数据区域 p42 Java内存区域划分概述 p43 程序计数器 p43 程序计数器是唯一一个不会存在OOM的内存区域 p4 ...

  5. 深入理解Java虚拟机-虚拟机执行子系统

    本博客主要参考周志明老师的<深入理解Java虚拟机>第二版 读书是一种跟大神的交流.阅读<深入理解Java虚拟机>受益匪浅,对Java虚拟机有初步的认识.这里写博客主要出于以下 ...

  6. 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)读书笔记

    前言 我在读 深入理解java虚拟机 这本书,把整体其中的关键点标记了,希望自己对它有个不一样的理解,也希望大家能看看这本写的很好的书 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版) pd ...

  7. JAVA类加载对字节码的处理_深入理解Java虚拟机(类文件结构+类加载机制+字节码执行引擎)...

    [本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 周志明的< ...

  8. [深入理解Java虚拟机]第六章 Class类文件的结构

    在本章关于Class文件结构的讲解中,我们将以<Java虚拟机规范(第2版 )> (1999年发布,对应于JDK 1.4时代的Java虚拟机)中的定义为主线,这部分内容虽然古老,但它所包含 ...

  9. 深入理解Java虚拟机-第六章 类文件结构

    第六章 类文件结构 6.1 概述 略 6.2 无关性的基石 因为想要实现 "Write Once,Run Anywhere"的伟大理想,Java 虚拟机被发明了出来.这些虚拟机都可 ...

最新文章

  1. oracle的clob赋值_JAVA处理Oracle数据库CLOB读写操作
  2. 人体姿态fast-human-pose-estimation.pytorch
  3. DL:深度学习模型概览(包括DNN、CNN、RNN等)的简介、网络结构简介、使用场景对比之详细攻略
  4. JavaFX快速入门完整代码:点击按钮显示当前系统时间示例
  5. wps出现安装installer_判断本机是否安装Microsoft Office或者wps
  6. linux 权限模式,Linux权限模式
  7. docker supervisor进程管理
  8. SAP UI5 应用开发教程之八 - 多语言的支持
  9. cheatengine找不到数值_彩票中奖500万,领了还不到一半?这些问题不解决,钱都拿不走...
  10. C语言重难点:大端小端
  11. RabbitMQ各个参数含义
  12. MySQL-第五篇视图
  13. gaussian软件linux版本,Gaussian 09的版本与平台。
  14. 【基础学习】操作系统学习笔记 - 内存管理:内存使用与分段、内存分区与分页、多级页表、快表、段页式内存管理的实现、内存的换入换出
  15. qlv格式转mp4格式(简单、高效)
  16. php下载文件并保存到指定文件夹
  17. 移动端适配:font-size设置方案的理解(浏览器调试移动端网页工具使用)
  18. cf103202M. United in Stormwind
  19. 离职后如何优雅退群?不要自作多情说告辞,聪明人都懂这4个尺度
  20. 高仿知乎的php源码,高仿百度知乎问答系统

热门文章

  1. win10服务器修改远程密码,win10系统远程桌面保存密码后无法修改的解决方案...
  2. chrono_duration(一)
  3. 密钥文件读取保存为String,并转PublicKey/PrivateKey
  4. 如何将一个大文件打包压缩成几个小的文件及其解压缩打开方法
  5. 微信还能这么玩?半透明的微信背景主题用起来!
  6. 幼儿园介绍信(15篇)
  7. 佳能软件不用光盘安装升级包的方法
  8. iOS开发中动画之点赞图标放大效果
  9. 三件套都有什么_床上用品三件套,四件套,五件套,七件套分别包括的是哪些...
  10. 线程并发锁竞争--java锁jvm锁--synch锁分析