zoukankan      html  css  js  c++  java
  • 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开始。

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

    其他待补充……

  • 相关阅读:
    2021/3/12
    2021/3/11
    2021/3/10
    2021/3/9
    2021/3/8
    2021/3/5
    2021/3/4
    2021/3/3
    2021/3/2
    2021/3/1
  • 原文地址:https://www.cnblogs.com/naray/p/15422428.html
Copyright © 2011-2022 走看看