`

《深入理解Java虚拟机》笔记之第6章 类文件结构

 
阅读更多

1Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件中,中间没有添加任何分隔符。

       Class文件中只有两种数据类型:无符号数和表。无符号数可以描述数字、索引引用、数量值,或者按照UTF-8编码构成的字符串值;表是由多个无符号数或其他表作为数据项构成的复合数据类型。整个Class文件本质上就是一张表。

 

2Class文件的构成

1)魔数:0xCAFEBABE,位于Class文件的头4个字节。

2)属性表:Slot是虚拟机为局部变量为分配内存所使用的最小单位。对于bytechar、floatintshort

booleanreferencereturnAddress等长度不超过32位的数据类型,每个局部变量占用1Slot恩赐 doublelong则需要用2slot来存放。

code_length是一个u4类型的长度值,理论上最大值为232-1个,但是虚拟机中规定了一个方法不允许65535条字节码指令,否则会拒绝编译(某些复杂的JSP文件可能会出现这个问题)。

3this对象。在任何实例方法中,都可以通过“this”关键字访问到此方法所属的对象。其实现原理即:javac编译器在编译的时候把对this关键字的访问转变为对一个普通方法参数的访问,然后在虚拟机调用实例方法时自动传入此参数即可。因此在实例方法的局部变量表中至少会存在一个指向当前对象实例的局部变量。但如果此方法是类方法(静态方法),则可能不存在局部变量(Args_size=0)

4ConstantValue属性。虚拟机的变量赋值。

对非static类型的变量(也就是实例变量)的赋值是在实例构造器<init>方法中进行的;

对类变量,有两种赋值方式:A、赋值在类构造器<clinit>方法中进行,或者使用ConstantValue属性进行赋值。

Sun Javac编译器来说,如果同时使用finalstatic来修饰一个变量(即常量),并且其数据类型是基本类型或String,就生成ConstantValue属性来进行初始化;如果该变量未被final修饰,或者并非基本类型及字符串,就选择在<clinit>方法中进行初始化。(P166

 

 

3Java虚拟机执行字节码是基于栈的体系结构。(P158

分享到:
评论

相关推荐

    JAVA--达内培训笔记

    JAVA--达内培训笔记】 1、Java之父Golsling 1995年5月23日 Java诞生 1998年12月 1.2版本 Java2 J2SE J2EE J2ME 2004年12月 1.5版本(5.0) Java JavaSE JavaEE JavaME 2、Java SE --- Java标准平台 Java EE -...

    Java-notes:Java 知识梳理和学习笔记,计算机网络,数据结构,设计模式等

    Java 的学习笔记和整理的知识点,包含Java语言基础、Java服务端方向的框架、设计模式、计算机网络、算法、Java 虚拟机和数据库等多个方面的内容。想了解前端的内容参考,Android相关的内容参考。 目录结构 语言基础...

    2018最新JAVA架构师培训视频教程(附笔记、源码 、视频 网盘链接 详细)

    018最新JAVA架构师培训视频教程(附笔记、源码、视频教程 全网盘链接...三、JAVA虚拟机 四、Linux部分 五、数据库设计与优化 六、互联网中间件架构设计 七、互联网框架应用 八、互联网分布式综合项目实战(转载)

    【读书笔记】【图解JVM】

    JVM内在结构的图解文档,visio格式 1.编译过程 2.内存结构 3.对象与类的结构 4.类结构信息 5.对象建立过程 6.收集器 7.方法调用 8.垃圾回收 9.JIT 10.指令 11.线程

    c#学习笔记.txt

    一个结构不能从另一个结构或类继承,而且不能作为一个类的基。但是,结构从基类 Object 继承。结构可实现接口,其方式同类完全一样。 [c ] 与 C 不同,无法使用 struct 关键字声明类。在 C# 中,类与结构在语义上是...

    day020-继承加强和设计模式代码和笔记.rar

    即当前类所在路径及其引用的第三方类库的路径,如第四节中的问题6所述)下的类库 加载到内存中。 开发者可以直接使用系统类加载器。 5. 设计模式:(框架中使用,是程序设计的高级思想) 1. 单例模式...

    Eclipse开发分布式商城系统+完整视频代码及文档

    │ │ 深入理解Java内存模型.pdf │ │ │ └─课后资料 │ ├─笔记 │ │ 淘淘商城_day20_课堂笔记.docx │ │ │ └─视频 │ 07-使用Jedis连接集群操作.avi │ 00-今日大纲.avi │ 01-RDB持久化方式.avi │ 02...

    leetcode下载-Android_AutoTest:Android_AutoTest

    [JVM(Java虚拟机)] 第三部分 [DataStructure(数据结构)] 链表 字符串 树 图 [排序] 查找 《剑指Offer》 《程序员面试金典》 《LeetCode》 《程序员代码面试指南(左程云)》 第四部分 [Network(网络)] 第五部分 ...

    Google Android SDK开发范例大全(完整版)

    Android 应用程序文件实际上是归档文件,可通过 WinZip 之类的软件查看。扩展名为 apk。 •发出 ping 命令,查看 Google.com 是否可用。 从相同的命令提示符环境中,还可以与 SQLite 数据库交互,启动程序以及执行...

    Android-Notes:关注基础知识,打造优质Android博客,公众号[xfhy]的作者

    这里是写博客的地方,努力打造适合初中高级工程师能够看得懂的优质文章,如果想第一时间获取文章,欢迎关注我的公众号:xfhy... Java集合基础虚拟机 5.Kotlin 6.安卓系统原始码解析三方库原理反编译Gradle NDK看法多进

    APKTool批处理版l

    第三种就是我在这里要向大家推荐的APKTOOL,他的原理是把APK进行反编译,生成程序的源代码和图片、XML配置、语言资源等文件。我们秩序对有关图片和语言资源等文件进行修改,再编译打包成APK并签名,就可以得到汉化版...

    香槟网络系统 G H O S T XP SP3 7.0

    *破解 Tcpip 连接数限制,破解系统主题限制,并集成微软 JAVA 虚拟机。 *集成 DirectX0903,VBVC最新版本运行库。 *系统在完全断网的情况下制作,确保系统更安全。 *采用通过微软数字签名认证驱动并自动识别安装,...

Global site tag (gtag.js) - Google Analytics