专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

一张图分析类的字节码结构

  什么是class
  Class文件是一组以8个字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在文件之中,中间没有添加任何分隔符,这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据,没有空隙存在。当遇到需要占用8个字节以上空间的数据项时,则会按照高位在前的方式分割成若干个8个字节进行存储。
  无符号数属于基本的数据类型,以u1、u2、u4、u8来分别代表1个字节、2个字节、4个字节和8个字节的无符号数,无符号数可以用来描述数字、索引引用、数量值或者按照UTF8编码构成字符串值。
  表是由多个无符号数或者其他表作为数据项构成的复合数据类型,为了便于区分,所有表的命名都习惯性地以info结尾。表用于描述有层次关系的复合结构的数据,整个Class文件本质上也可以视作是一张表,这张表数据项按严格顺序排列构成。
  接下来以个实际的class来分析类的字节码结构。先来看看一个简单的类publicclassJavapTest{privateintcount;publicintsum(intx){countx;returncount;}staticclassTest{Stringxtest;}}
  通过javap可得到下面内容publicclasscom。zl。basic。JavapTestminorversion:0majorversion:52flags:ACCPUBLIC,ACCSUPERConstantpool:1Methodref4。18javalangObject。init:()V2Fieldref3。19comzlbasicJavapTest。count:I3Class20comzlbasicJavapTest4Class21javalangObject5Class22comzlbasicJavapTestTest6Utf8Test7Utf8InnerClasses8Utf8count9Utf8I10Utf8init11Utf8()V12Utf8Code13Utf8LineNumberTable14Utf8sum15Utf8(I)I16Utf8SourceFile17Utf8JavapTest。java18NameAndType10:11init:()V19NameAndType8:9count:I20Utf8comzlbasicJavapTest21Utf8javalangObject22Utf8comzlbasicJavapTestTest{publiccom。zl。basic。JavapTest();descriptor:()Vflags:ACCPUBLICCode:stack1,locals1,argssize10:aload01:invokespecial1MethodjavalangObject。init:()V4:returnLineNumberTable:line3:0publicintsum(int);descriptor:(I)Iflags:ACCPUBLICCode:stack3,locals2,argssize20:aload01:dup2:getfield2Fieldcount:I5:iload16:iadd7:putfield2Fieldcount:I10:aload011:getfield2Fieldcount:I14:ireturnLineNumberTable:line8:0line9:10}SourceFile:JavapTest。javaInnerClasses:static65of3;TestclasscomzlbasicJavapTestTestofclasscomzlbasicJavapTest
  我们再来逐个字节分析一下,就知道上面内容是怎么来的。用HexEditorNeo打开JavapTest。class。
  JavapTest。class
  图中的红色数字代表一个项,作为代号我们来逐个分析一下。
  1魔数确定这个文件是否为一个能被虚拟机接受的Class文件
  2次版本号
  3主版本号,34换算10进制为52
  4常量池数量,0017换算为10进制为23,常量池计数从1开始,所以共有22个常量
  5第一项常量访问标志0a,代表方法引用,0004(4),0012(18)分别指向第4,18个常量
  6第二项常量访问标志09代表字段引用,0003(3),0013(19)分别指向第3,19个常量
  7第三个常量访问标志07代表类的全限定名0014(20)指向第20个常量
  8第四个常量访问标志07代表类的全限定名0014(21)指向第21个常量
  9第五个常量访问标志07代表类的全限定名0014(22)指向第22个常量
  10第6个常量访问标志01为utf8字符,0004代表有4个字节Test
  11第7个常量访问标志01为utf8字符,000c代表后面12个字节是该常量的值InnerClasses
  12第8个常量访问标志01为utf8字符,0005代表后面5个字节是该常量的值count
  13第9个常量访问标志01为utf8字符,0001代表后面1个字节是该常量的值I
  14第10个常量访问标志01为utf8字符,0006代表后面6个字节是该常量的值
  15第11个常量访问标志01为utf8字符,0003代表后面3个字节是该常量的值()V
  16第12个常量访问标志01为utf8字符,0004代表后面4个字节是该常量的值Code
  17第13个常量访问标志01为utf8字符,000f代表后面15个字节是该常量的值LineNumberTable
  18第14个常量访问标志01为utf8字符,0003代表后面3个字节是该常量的值sum
  19第15个常量访问标志01为utf8字符,0004代表后面4个字节是该常量的值(I)I
  20第16个常量访问标志01为utf8字符,000a代表后面10个字节是该常量的值SourceFile
  21第17个常量访问标志01为utf8字符,000e代表后面14个字节是该常量的值JavapTest。java
  22第18个常量访问标志0c为NameAndType常量,000a(10),000b(11)分别执行第10和11个常量
  23第19个常量访问标志01为NameAndType常量,000a(8),000b(9)分别执行第8和9个常量
  24第20个常量访问标志01为utf8字符,0016代表后面22个字节是该常量的值comzlbasicJavapTest
  25第21个常量访问标志01为utf8字符,0010代表后面16个字节是该常量的值javalangObject
  26第22个常量访问标志01为utf8字符,001b代表后面22个字节是该常量的值comzlbasicJavapTestTest
  27访问标志0021ACCPUBLIC、ACCSUPER标志为真000100200021
  28类索引0003指向第三个常量
  29父类索引0004指向第四个常量
  30接口索引0000代表没有实现接口
  310001代表字段数量1,0002代表private,0008代表字段名称指向常量池的I表示int,0009代表字段描述符指向常量池9即count
  方法访问标志说明
  320002代表有两个方法,0001代表public,000a指向第十个常量,000b指向第11个常量,0001代表有一个属性,属性名称的索引值为0x000c,对应常量为Code,说明此属性是方法的字节码描述,0000001d(29)代表代码长度,0001是maxstack操作数栈最大深度,0001局部变量表所占的Slot,接下来的四个字节(00000005)是代码长度,字节码长度为5,接下来的5个字节2AB70001B1,接下来0000两个自己表示式异常处理表,这里没有异常所以是0,接着0001属性表示有一个属性,属性索引为000d(13)在常量池中的引用是LineNumberTable。00000006是属性长度,表示后面6字节是它的长度。0001是行号表长度1,包含startpc和linenumber两个u2类型的数据项,前者是字节码行号,后者是Java源码行号(0000:字节码行号,0003:java源码行号)
  33。是第二个方法,0001代表public,000e指向第11个常量,000f指向第15个常量,0001代表有一个属性,属性名称的索引值为0x000c,对应常量为Code,0000002b(43)是代码长度,0003,0002分别是栈深度和局部变量表。0000000f(15)字节码长度,2a59b400021b60b500022ab40002ac,0000yi异常处理表,0001有一个属性,000d(13)LineNumberTable,0000000a(10)属性长度,000200000008000a0009(0002行长度为2,0000:0008字节码和源码行号,第二个000a:0009),
  方法属性完了继续是内的属性,接下来的0002表示有量个类属性。0010表示指向16号常量SourceFile,00000002是属性长度,0011指向17号常量即JavapTest。java,
  0007指向第7个常量池InnerClasses,0000000a(10)属性长度,0001表示内部类数量为1。
  0005内部内索引5,0003外部类索引3,内部类名索引指向第6个常量池,0008内部内访问标志是静态标志
  至此,JavapTest类的每个字节都分析清楚了,工作中可能用不到这些,但是作为程序员的你一定要知道这个class是怎么组织的很重要。深入理解java是必不可少的。

全国跳水冠军赛首日双人项目决四金王宗源组合意外折戟中新社上海3月19日电(记者缪璐)2023年全国跳水冠军赛暨奥运会福冈世锦赛亚运会成都大运会选拔赛19日拉开帷幕。比赛首日,何超严思宇组合和陈艺文昌雅妮组合分别夺得男女双人3米跳板央视纪录片解密三镇三冠秘密俱乐部期待股改力争可持续发展近日,央视体育频道足球之夜节目播出了题为三冠王的秘密专题片,讲述了武汉三镇三年三冠的背后故事,并向球迷介绍了球队运营管理的日常。在25分钟的专题片中,俱乐部高层也表达了希望可以完成鱼虾蟹是发物,癌症患者不能吃?常见的5类发物该这样忌口发物是中医的说法,也就是会诱发或加重疾病的食物,常见的有公鸡肉羊肉和狗肉鱼虾蟹类等。医生常常叮嘱患病后不能吃发物,特别是对癌症患者来说对发物避而远之,生怕会造成癌症扩散或转移,那癌欧洲青训培养成材的赵维伦,是中国男篮后卫线的答案吗?提起中国男篮后卫线希望之星赵维伦的名字,他是一个如此特别的存在,因为年仅17岁的他已经在欧洲的意甲联赛效力了,他不是中国国内任何一家俱乐部培养,也不是国内某所学校打出来的,更不是成白衣王子高速闲庭信步,杭州高速交警一查发现大有来头溧宁高速千黄段穿过杭州千岛湖,其辖区风景区是著名的国家5A级旅游景区,素有最美高速公路之称,由于生态环境好,高速上有时会出现飞禽走兽。3月18日凌晨,杭州市公安局高速交警支队七大队俄罗斯族医生格林根的家国情怀抗日募捐集腋成裘,积土成山国家危难,全民抗日1939年,正值日寇进犯,国家危难,民族危亡的关键时期。处在抗战大后方的新疆各族人民自发的开展了大规模的抗日募捐活动,今天故事主人公来自美丽的塔城地区,俄罗斯族医科学家们发现定向运动可以训练大脑有助于对抗认知能力的衰退根据麦克马斯特大学的最新研究,定向运动一种结合了运动能力导航技能和记忆力的运动可能作为一种有效的干预或预防措施,防止与痴呆症有关的认知能力下降。据研究人员称,定向运动中身体锻炼和导重要突破!我国科学家发现两种罕见新矿物科技日报实习记者李诏宇矿物是具有稳定的相界面和结晶习性的天然化合物,拥有特定的化学组成。长期以来,人类文明的发展演变离不开对矿物的利用,社会生产水平的升级迭代也与新种类矿物的发现关谁来养活中国?中国已给出确定答案3月18日,参观者和展商在展会上交流。当日,第十四届中国国际种业博览会暨第十九届全国种子信息交流与产品交易会在天津市开幕。新华社记者赵子硕摄新华社天津3月20日电题谁来养活中国?中春分吃一宝,不用医生保,明天春分,1宝是个啥?怎么吃春分是二十四节气之一,也是春季的最后一个节气。在这一天,白昼和黑夜相等,阳气渐盛,万物生长。民间有许多关于春分的习俗和食俗,其中有一句谚语说春分吃一宝,不用医生保。那么,一宝指的是96岁了,她靠什么赢下职业围棋比赛?在近百岁的年纪依然伫立于职业赛场强手之林,是一种什么体验?日本女子围棋选手杉内寿子八段是世界最年长的现役围棋选手,刚度过96岁生日的她在最近举行的日本第49届棋圣战预选赛中执黑以四
配M2Pro和M2Max的新MacbookPro不会随M2iPadPro同时发布彭博大神MarkGurman在其PowerOn通讯中谈到苹果将会在未来数天推出M2iPadPro,至于盛传会推出的MacBookPro14和MacBookPro16更新版仍然估计会如何选高性价比加湿器!热门款阿卡驰空气除菌加湿器深度测评为什么需要加湿器?为什么?加湿呗!那么简单?当然了,还有啥?相信大家都有过这种经历,相对湿度一旦低至30左右,你呼吸的每一口都可以感受到干燥,而随着时间的推移,你身体中的水分也会随QuestProvs。Quest2参数对比QuestPro与Quest2参数对比QuestProQuest2解析度每眼18001920(3。5MP),LCD(2x)每眼1,8321,920(3。5MP),LCD(1x)刷新分享几款CD播放机相信,您一定使用网络音乐流媒体,比分Applemusic,QQmusic,Spotify,等也相信,有一部分使用黑胶和CD播放机。今天分享几款2022年比较hot的CD播放机Mar家电降价潮来临,中高端款底价提前揭露,美的海尔不到千元不久之后就是一年一度的双十一购物节,按理说等到双十一买东西才是最便宜的。但家电界有个与之相反的规律,中高端款家电因为定价比较高,即使优惠之后价格依旧不够低端家电有吸引力。所以中高端刚刚更新最新PS23。5。2版携Adobe2022全新稳定版全家桶来了就在前不久,PS23。5。2版本来袭,迎来了ACR15。0,,搭配神经滤镜,一键升级安装。总结起来一句话,要用就用最新的!无偿领取提示评论区任意回复私信我关键词ps根据以上提示即可脉冲星日报六十八期这是一张优秀的显卡No。1,英伟达NVIDIA宣布取消推出GeForceRTX408012GB显卡,但是官方此前称这是一张优秀的显卡。官方表示是因为防止人们混淆两种RTX4080的型号。而实际上,这在雅鲁藏布江中游河岸两边,为什么会出现奇怪的爬升沙丘?雅鲁藏布江又称为藏南大河,位于西藏自治区境内,是我国最长的高原河流,也是世界上海拔最高的大河之一。雅鲁藏布江发源于西藏西南部喜马拉雅山北麓的杰马央宗冰川,沿亚欧板块和印度洋板块的消要驯化一个人,最好的方式是威胁解X写在最后人类进化成恐惧情绪,这有助于让我们的祖先活着,以至于今日我们非常容易受到威胁的恐惧,甚至被威胁吓倒,无论是真实的威胁还是纸老虎。在孩子还在对世界保持探索好奇的阶段,家长总是注意!个体工商户税收征管方式或迎来大变最近看到几个比较重要的消息,都是涉及核定征收转查账征收的,或预示着征管的某种变化,而这种变化需要引起相关企业的重视,并注意防范相关的涉税风险。一黑龙江大庆税务简单来说,黑龙江大庆市一个卖饮料的,为何宣传方式会不断被质疑,什么都没露算擦边吗?众所周知,椰树集团又火了一把。但他们直播间的风格也再次引起网友的热议,一度被顶上热搜。直播时,他们用了四位长相与身材极好的美女,用热舞的形式来进行直播带货。不少网友认为他的直播风格
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网