JVM类加载机制(一)--基本概念篇

在说到类加载机制之前,要先明白几个基本概念,什么是机器码,什么是字节码。在zzm的虚拟机类加载机制中有一句话是这么说的:“代码编译的结果从本地机器码变为字节码”...这句话是错误的,尽信书不如无书。

1.什么是机器码?

机器码是机器能够通过内置的指令系统识别的指令编码。

2.什么是字节码?

字节码(ByteCode)是一种中间状态的二进制文件(中间码),就是我们常见的*.class文件。

为什么说它是中间码?因为字节码处于源程序(如java语言的.java文件,JRuby的*.rb文件)和机器码之间,是一个中间状态。

3.为什么要用字节码?

平台无关性:我们是否还记得当初学习java时候有句著名的口号--一次编写,到处运行。java语言之所以能运行在各个平台上,与各个平台上运行的虚拟机有很大关系。因为这些虚拟机都能够载入和执行同一种与平台无关的程序存储格式--字节码(ByteCod),所以字节码是平台无关性的基石。

语言无关性--可能很多人认为java虚拟机就是专门为java语言设计的,其实这种理解是错误的。java虚拟机在设计之初,就充分考虑了让其他语言在java虚拟机上运行的可能性,而字节码作为一种中间状态的文件,能够建立各种语言编写的源程序与虚拟机之间的桥梁(源程序-->编译器-->字节码-->虚拟机),所以字节码也是语言无关性的基石。


 

以上两个无关性基石,共同确立了字节码的地位。

4.javac编译器

javac编译器,属于前端编译器的一种,是专门针对java语言而设计的一款编译器,它是由java语言编写的程序,负责把*.java文件转变成.class文件.

编译过程我们后面详述.

猜你喜欢

转载自zhaodengfeng1989.iteye.com/blog/2410019