Java是怎么做到跨平台的

运行一个Java程序需要JDK,JRE和JVM。Java运行时环境JRE,也就是JVM(Java Virtual Machine),Java虚拟机。它可以实现跨平台(“write once, run everywhere”)

Java和C、C++语言最大不同就是一个直接操作底层,还要自己管理释放内存,一不小心就完蛋了。而Java在中间加了一层,就是JVM,不用我们关心底层,只要面向对象编写代码就可以了,操作系统,内存管理等相关就交给JVM来把关,我们不用关心。这里注意,javac后生成的字节码文件虽然都是一份,但是不同操作系统需要不同的JVM。

什么是编译什么是解释呢?

C和C++语言都属于编译型语言,而Java即是编译型语言,又是解释型语言。编译是一次性把源程序翻译成目标代码,然后计算机读取的时候可以直接以机器码执行,这样的效率会很高。但是对于解释则不同,解释的特点是只有执行的时候才去翻译,边翻译边执行。这里做个双十一购物的例子,编译就是双十一我们提前准备好购物车,然后到了凌晨一次性疯狂剁手;解释是平时咱们购物,需要什么再买什么。而像python和js都是解释型语言,有人会说,这不是脚本语言吗?脚本语言也是一种解释型语言,会有一个专门的解释器,也就是执行一句解释一句。上面我们说了Java即是编译型语言也是解释型语言,为什么Java这么牛皮?我们敲完代码,用javac命令执行,生成一个字节码文件,这个叫做编译,只不过与传统的编译不同的是这里的编译并不是将Java源程序直接翻译成机器代码,而是翻译成来一个中间代码class文件,叫做字节码文件。这个字节码文件是与平台无关的,这是实现跨平台超级重要的前提,那么接下来就由JVM来在不同平台解释执行了。因此,jvm对于Java的跨平台来说就是一个媒婆,由她来牵线搭桥。总结Java源程序首先编译生成字节码文件,这个字节码文件是不能直接运行的,需要由不同平台上的jvm把这个字节码翻译成对应平台上的机器语言,这里的翻译其实就是解释,在这个过程中,字节码始终都是一样的,但是由各个平台上的jvm翻译之后的机器码却是不同的。Java正是通过这种机制实现的跨平台,总结下就是Java是跨平台的,真正跨平台的是Java程序,而jvm是c和c++编写的软件,是编译后的机器码,不同的平台上jvm的版本是不同的。
经过编译之后的字节码文件是存放在我们电脑中的磁盘中的,当对字节码文件进行解释的时候,这个字节码文件就会通过一个类加载器的东西把字节码文件加载进电脑的内存中,当然这个加载过程是有特定的步骤的,主要就是检查这个字节码文件是否符合jvm规范等等,加载成功就会在电脑中的内存中开辟一块空间,这块空间其实就是jvm,然后再由内存输出内容。

下一章我们来看下更深层次的,Java代码如何翻译成机器语言的?

发布了47 篇原创文章 · 获赞 4 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/shyy123/article/details/104997197