上节学习回顾
在上一节当中,主要以自己的工作环境简单地介绍了一下自身的一些调优或者说是故障处理经验。所谓百变不离其宗,这个宗就是我们解决问题的思路了。
本节学习重点
在前面几章,我们宏观地了解了虚拟机的一些运行机制,那么从这一章节开始,我们将更加深入虚拟机的深处去了解其运行细节了。例如本章节的学习重点是类文件的结构,也就是虚拟机的数据入口。既然是数据入口,肯定得要符合虚拟机的数据定义规范才能给虚拟机处理,否则它压根就不认识你。
概述
在学习之前,先抛出一个比较常见的问题:C语言与Java的运行效率如何?其实这个问题随着技术的发展越来越不好回答,先看看下图:
如果单单看C语言和Java语言的一个运行流程,我会毫无疑问的举起手脚投C语言运行效率比Java的运行效率高,但随着技术的进步和发展(后面章节会学习到的技术),我只能说Java的运行速度跟其它的高级语言相比只会越来越近,并且某些情况不输给C语言。当然,这一章节讨论的不是跟其它语言比效率,是先给你和我一个比较宏观的角度去理解类文件的位置。Java语言最大的优势就是一次编译到处运行,不像C语言文件在不同的操作系统会有兼容性问题。但凡事有收获就肯定有付出的,世界上没有那么完美的事情,Java这跨平台的优势也却却是劣势。因为多了一层“虚拟机系统”这件“温暖的棉袄”才得以让Java可以到处跑,也确实有人用C语言是裸奔而Java是裹着棉袄奔跑来形容两者的运行效率。C语言编译后是机器语言文件可以直接执行,而Java语言文件编译后是类文件。类文件还需要在虚拟机运行时(解释+编译)转换成机器语言才能执行。如果我们直接去查看机器语言文件,里面除了0就是1,这就是计算机唯一认识的两个字。因为类文件也称字节文件,就是以一个字节(8bit)为单位组成的文件, 用文本打开一样是全是0和1的二进制样式,但类文件的二进制规则和机器语言的二进制规则又有所不同。例如类文件开头的前32位(4字节)是定义类文件的标识,前32位字节如果Java虚拟机不认识,那就不是类文件了。同理,如果计算机硬件不认识这个二进制文件的排版规则,那就是这个不是机器语言。而这一章节主要学习的就是类文件是如何组成的?又有哪些规则?其实说白了,类文件也是一种语言文件,只不过面对的不是我们这些普罗大众的应用开发者,而是面向于那些基于Java虚拟机的语言设计者和开发者看的而已。
无关性的基石
&