JVM初探之类文件结构

java 的 .class 文件字节码如图:

Class 文件是一组以8字节为基础单位的二进制流,各个数据项目有着严格的结构。下面我们介绍下class文件的结构。

魔数
  class文件的头4个字节是魔数:  ,他的作用便是验证这个文件是否是一个java虚拟机可以使用的文件,

版本号

  接下来的是两个字节的小版本号,和两个字节的大版本号:  

常量池结构

  它分为两个部分:

第一部分是:常量池的容量:  即二进制 54 ,代表了 53 项常量,注意这里的容量计数是从 1 开始的即索引范围是 1 ~ 53。

第二部分是:常量池的内容:常量池有的项目类型

              CONSTANT_Utf8_info     1    UTF-8 编码的字符串

              CONSTANT_Integer_infor   3    整型字面量

                    ...      

              CONSTANT_Class_infor     7      类或接口的符号引用

                    ...

这些项目类型还有自己的结构,这里先不写出来了。这一部分的字节码如图:  

就是常量池容量后面的 53 个常量,一大堆的字节。后面其实还有的。。。。 就到这里吧。

访问标志

    常量池之后就是两个字节的访问标志,用于识别类或者接口层次的访问信息。

      一些访问标志:

            ACC_PUBLIC  0x0001    是否为 public 类型

            ...

接下来是类索引、父类索引与接口索引集合

字段表集合

方法表集合

属性表集合

 

参考:深入理解java虚拟机  -- 周志明 著


__EOF__

本文作者Angel_L
本文链接https://www.cnblogs.com/angell-N/p/6690529.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Angel-h  阅读(173)  评论(0编辑  收藏  举报
编辑推荐:
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示