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开始。

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

    其他待补充……

  • 相关阅读:
    [TJOI2013]单词 AC 自动机
    NOIP 2017 逛公园 记忆化搜索 最短路 好题
    [BJWC2012]冻结 分层图最短路
    dijkstra STL 堆优化
    [POI2002][HAOI2007]反素数 数论 搜索 好题
    bzoj 2456: mode 思维题 好题
    [SDOI2012]Longge的问题 欧拉反演_欧拉函数
    [JLOI2011]飞行路线 分层图最短路
    页面加速优化
    制作html5微信页面的经验总结。
  • 原文地址:https://www.cnblogs.com/naray/p/15422428.html
Copyright © 2011-2022 走看看