Java虚拟机 之 Class文件(初识)

说在前面

当我们编写好一个.java文件,可以通过命令行用javac的命令来进行编译,javac是jdk自带的一个java的编译工具,像这样:

javac Hello.java

这是候就会生成一个名为 Hello.class 的文件,这个class文件就是我们现在要关注的。

Class文件是为了保证运行的效率和安全性,我们把人所能看懂的代码,翻译成机器所能看懂的字节码。

因为我们电脑里装的大多是文本编辑器,所以说打开class文件是一堆乱码,应该使用一款二进制查看器,像Binary Viewer,如果用mac的电脑,建议使用Hex Fiend。

Class文件结构

Class文件是一组以8位字节为基础的二进制流,各个数据项目严格按照顺序紧凑排列在Class文件之中,中间也没有任何分割符,所以,class文件中的内容几乎全都是程序运行的必要数据。

当遇到8位字节以上空间的数据项时,会按照高位在前的方式,分割成若干个8位字节进行存储。

为什么使用Class文件来进行描述,而不使用xml、或者json?

因为不管是xml,还是json文件,因为存在很多标签和换行,所以这些描述文件的可读性是非常好的;但也正是因为这些标签和换行,导致增加了不必要的存储,还有在读取的时候也浪费了性能。

Class文件中有两种数据类型:无符号数和表。

无符号数就是用来描述数字、索引的引用等;

表可以嵌套表,也可以嵌套无符号数,相当于一个复合的数据结构。

Class文件结构中大约包含:

魔数;

Class文件版本;

常量池;

访问标志;

类索引,父类索引,接口索引集合;

字段表集合;

方法表集合;

属性表集合等。

以上这些还需详细说明。

Class文件设计理念与存在的意义

跨平台、语言无关性。

JVM不强调你使用哪种语言编写程序,只要最后的程序能够翻译成JVM能够识别、加载、并运行的字节码格式即可,所以JVM能够做到跨平台和语言无关性,由此催生scala,kotlin,rubby等众多优秀的编程语言。

发布了54 篇原创文章 · 获赞 4 · 访问量 9190

猜你喜欢

转载自blog.csdn.net/yichen97/article/details/102493051