• Java虚拟机之类文件结构


    一、简介

      众所周知,Java虚拟机最大的特性就是跨平台,但是,Java虚拟机还有另一个重要的特性,就是语言无关性,Java虚拟机支持其它语言通过编译器编译成.class字节码文件,交付给虚拟机运行。

      大家都知道Java语言通过javac编译器将Java编译成.class字节码文件,其它语言也是一样的。

       Java虚拟机支持语言:Java、Kotlin、Groovy、Jruby、Scala、Jython、Fantom、Clojure、Rhino、Ceylon。

    二、Class类文件结构

      1. Class文件是什么

        Class文件是一组以8个字节为基础单位的二进制流,各个数据项目严格紧凑地排列在文件之中,中间没有添加任何分隔符。当需要8个字节以上空间的数据项,则需要按高位在前的方式分割成若干个8个字节进行存储。

      2. 魔数和版本号 

        Class文件头四个字节就魔数,它唯一的作用是确定Class是否被Java虚拟机接受。不仅Class文件中使用魔数标识身份,其他文件格式也有使用魔数的习惯,如:图片格式GIF和JPG在文件头都有魔数。Class文件的魔数是0xCAFFBABY(咖啡宝贝)。

        Class文件头四个字节魔数后面四个字节是版本号,5、6是次要版本,7、8是主要版本。

    cafe babe 0000 0034 0042 0a00 1100 2307

        Class文件头四个字节是魔数标识:cafe babe。

        Class文件5-8字节是版本:0000 0034,使用Class文件34版本。

      3. 常量池

        在Class文件主次版本号后面紧跟着常量池入口,Class文件结构中常量池和其他项目关联最多的数据,常量池是Class文件第一个表类型的数据项目。常量池的常量数量是不固定的,Class文件版本号后面,用u2字节表示常量池常量数量,如:0042,代表常量池中有42个常量。和Java语言不同,常量池计数是从1开始,而不是0开始。

        在常量池中有两大类常量:字面量和符号引用。

    其他待补充……

  • 相关阅读:
    Scrap websites with nodejs!
    about nodejitsu
    有道字典 Chrome Extension
    嘿嘿,又中毒了spoolsv.exe
    Duilib 入门教程: 怎么创建一个自定义的窗口
    解决Extjs 中,radio 和 checkbox 文字纵向排列的css
    用CSS3实现图像风格
    【iOSCocos2d游戏开发之二十二 】CCSpeed实现CCAnimate动画进行时设置慢动作以及设置游戏加减速进行(塔防游戏必备)! .
    Unsupported compiler 'GCC 4.2 (Plausible Blocks)' selected for "i386"
    php 使用 ffmpeg 转换视频,截图,并生成缩略图
  • 原文地址:https://www.cnblogs.com/naray/p/15422428.html
Copyright © 2020-2023  润新知