【JVM】深入解析class类文件

众所周知,我们在运行java代码时,首先java文件会被编译成class文件,然后将class文件装载到java虚拟机中。那么这个class文件到底是什么呢,今天我们就来分析一下。


首先编写一个测试类Test,内容很简单,就是输出“hello,world”


Test类
java文件以及编译生成的class文件


使用WinHex工具打开这个Test.class文件,会发现class文件内容是这样的:


class文件内容的一部分

观察这些数据,不难发现,class文件是一组以8位字节为基本单位的二进制流,各个数据项目严格地按顺序排列在一起,中间没有空隙。

那么图中这些16进制数据代表什么含义呢?

1.每个class文件开头的4个字节称为“魔数”,即图中的“CA FE BA BE”,(一个16进制数代表4位,两个就是8位,刚好是一个字节),这个魔数的作用就是:确定这个文件是否是一个能被JVM接受的class文件。

2.紧接着魔数的4个字节是Class文件的版本号,其中5、6两个字节是次版本号(0x0000),7和8两个字节是主版本号(0x0035),也即10进制中的53,代表这个文件是能被jdk1.8或以上版本虚拟机执行的class文件。

3.再往后,就是常量池的入口常量池可以理解成class文件中的资源仓库。在java中有三种常量池:String常量池、运行时常量池和class常量池。而我们这里讲的就是class常量池,class常量池主要存放字面量和符号引用,由于不同class文件常量池中的常量数是不同的,所以会有两个字节表示常量池计数器,记录了常量的个数。这里是001E,是十进制中的30,表示有29项常量(第0项常量是空出来的)。紧接着后面的0A,是常量池第一项常量的标志位,属于CONSTANT_Methodref_info类型,代表类中方法的符号引用。其后的16进制数以此类推。

4.在常量池结束以后的两个字节代表访问标志,用于识别一些类或接口层次的访问信息。比如,这个class是类还是接口,是否定义成public等。

5.访问标志后面是类索引、父类索引和接口索引集合,class文件由这三项数据来确定这个类的继承关系。类索引确定这个类的全限定名,父类索引确定这个类的父类的全限定名,由于Object是所有java类的父类,所以除了Object之外,任何类的父类索引都不为0.接口索引集合描述这个类实现了哪些接口。

6.而在后面的是字段表集合、方法表集合和属性表集合,此处就不再做说明,如果有对这些感兴趣的,可以去查阅资料书,推荐周志明的《深入理解java虚拟机》(非打广告)

PS:java虚拟机这方面相关知识会在面试时问到,而且理解了java虚拟机的原理,会对我们写出更高效的代码有很大帮助。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354

推荐阅读更多精彩内容