Java程序运行原理
- Java代码的运行
在了解Java的运行原理之前,配置好JDK后,我们首先要了解如何运行一个Java程序
首先我们需要创建一个Java的源代码
/**
*This is a java program
*/
public class HelloWorld{
public static void main(String [] args){
System.out.println("Hello World!");
}
}
这是我们大多数人学习Java是写下的第一个程序,在这里我们延续这一传统。
第一步:Windows+R调出命令行如图
第二步:在命令行中输入cmd在按下回车可进入命令提示符窗口
第三步:跳转到.java文件存放位置
第四步:输入javac HelloWorld.java 在按下回车
此时你会惊奇的发现你的文件夹中出现了一个新的文件.class,那这是为什么呢,稍后会在Java程序运行原理中详细介绍
第五步:输入java HelloWorld程序就运行了
- Java程序运行原理
之后就是我们的正题了,Java程序运行原理
在Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(ByteCode)(class文件的内容),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机是相同的。Java源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行。
这也就是的Java具有跨平台的特性,即该class文件在windows上可以运行那么在Linux上也可以
这就类似与普通话语方言的关系,各地区有个地区的方言这就类似于不同的运行环境(Windows,Linux…)
但是相同的是他们都可以听懂普通话,所以你只需把一篇文章翻译为普通话,然后由各地区(Windows,linux…的解释器)翻译为方言。
如下图
Java虚拟机工作的流程如下
1.类装载区
描叙:Java虚拟机装载指定的CLASS文件
结果:形成这个CLASS类的实例对象
2.字节码校验器
描述:校验字节码是否正确
3.解释器
描述:这解释前面提到的不同平台有不同的解释器针对不同平台编译出不同的01编码
结果:产生01编码
4.操作系统平台
描述:操作系统平台会接收到一系列的01编码,并按其执行。
结果:运行出代码结果。
最后我们还可以将它与C语言或者C++进行对比。学习过C语言的人都知道,C语言在编译完成后生成的并不是.class文件,而是.exe文件,那这个文件与.class文件又有着什么样的区别呢?
C语言在编译后所形成的.exe文件其本身就是二进制编码的01文件,可直接向计算机传输01编码使其运行,不需要再通过解释器的翻译解释,由此我们易得C语言在编译后的运行应比Java来的更快,因为它不需要经过解释器的解释,但是同样的,它不具备Java的跨平台性,在不同的平台上还需要重新编译。同理可知C++;