最近在学习JVM,所以想把学完class文件这一章写个学习总结。具体的内容,以及对class文件的解析,我就不写了,因为《深入Java虚拟机》里有写到,我就不再多此一举再造个轮子了。而且在网上看到一篇写得不错的文章,讲得很容易理解,就是下面的链接了:
http://www.blogjava.net/DLevin/archive/2011/09/05/358033.html
我就讲一下我对Java的class文件的理解吧。其实现实生活中,一定是先遇到问题,然后才去想解决的办法。那么设计这么一个class文件,是遇到了什么问题呢?计算机的普及,软件版本的管理出现了问题,因为一个新版本软件要安装到所有的计算机上,是一件非常难管理的事情来的。所以就出现了Java,出现了JVM这些解决问题的办法。而class文件的就是这些解决办法的具体设计。而class文件的作用,就是为了平台无关性,网络移动性而设计的这么一个文件。
平台无关性,我想大家都可以理解,就是一个系统在哪个平台都可以运行。其实对于一般的程序员来说,有了JVM的帮助,确实就不需要处理平台之间的差异。但是对于JVM的开发者来说,他们还是要处理的。也就是将所有人需要处理的问题,变为了一小部份人需要处理的问题。这就需要定义一些规则。
网络移动性,指的是JVM在运行.class文件的时候,并不需要所有的类都加载完全后,才能执行的。也就是说,JVM要哪个类,然后它才去找这个类。这就要求,class文件比较小,不然我下载一个文件,要一个小时,这样谁也无法接受。
所以这一章主要讲的是:
1、class文件的规则,文件是怎样组织的,例如前四个字节是“魔术”。
2、class文件要求比较小,所以就约定了一些值,例如1代表什么,2代表什么,一些描述符的表示方法。
3、JVM在执行的时候,速度要较快,所以就多了一些设计。例如常量池的设计,用一个二维表(指针的指针)来记录一些信息。