首页 > 其他 > 详细

《深入理解Java虚拟机》笔记6

时间:2014-01-26 14:22:49      阅读:387      评论:0      收藏:0      [点我收藏+]

bubuko.com,布布扣

class文件由无符号数和表两种类型数据构成。表其实相当于一种结构体,内部又嵌套无符号数或者表。

用u1,u2,u4,u8分别代表一个字节,两个字节,四个字节,八个字节的无符号数。

如图中所示,class中有16种类型数据项(当然这些数据是表嵌套着别的数据)。有一点需要注意的是,如果某一数据项

会以数组的形式出现多次,则此数据项前必定有一个无符号数的数据项来记录数组的大小。

例如:常量池(constant_pool)的数量是多个,在常量池前会有常量池大小(constant_pool_count)的

数据项。属性(fields)也是可以定义多次的数据项,之前会有属性个数(fields_count)的数据项存在。

常量池有点特殊,看图可知,常量池的实际大小并不是constant_pool_count,而是constant_pool_count-1。

这是为了满足后面某些指向常量池的索引值的数据在特定情况下

需要表达“不引用任何一个常量池项目“,这种情况就可以把索引值置为0来表示。(到底是什么一种情况,我现在也不甚明白,之后明白了补上)

class文件结构中只有常量池的容量计数是从1开始,其他集合类型,如接口索引结合,字段表集合,方法表集合等还是和Java语言习惯相同,

从0开始计数。也就是说,如果常量池容量大小为22,实际常量池有21个,下标从1到21,方法表容量大小为22,实际方法就有22个。下标从0到21。

《深入理解Java虚拟机》笔记6

原文:http://www.cnblogs.com/zwm512327/p/3533656.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!