什么是平台?
JVM结构图
Java源码编译机制
如何实现跨平台?
JVM、JDK、JRE的区别
今天,我遇到了一个提问:为什么Java可以跨平台?
大多数人都知道Java可以跨平台得益于 JVM(java虚拟机)。
在这之前,我了解到的java跨平台得益于不同版本的jvm,那么它的底层原理是什么呢?
“一次编译,到处运行” 是Java的跨平台特性。像 C 、C++ 这样的编程语言没有它。
通过这篇文章,相信你会有进一步的了解。
Java是一种可以跨平台的编程语言。首先,我们需要知道什么是平台。我们把CPU处理器与操作系统的整体叫平台。
众所周知,如果说电脑是人,那么CPU就是人脑,它不仅负责思维运算,还负责指挥和控制身体的各个部位。CPU有很多种。除了英特尔和AMD,还有上面提到的sun的SPARC,如IBM的PowerPC等。不同公司生产的这些CPU使用不同的指令集。
指令集是CPU中用来计算和控制计算机系统的一套指令的集合。
指令集分为精简指令集(RISC)和复杂指令集(CISC)。每个CPU都有自己的特定指令集。
要开发一个程序,我们必须首先知道程序运行在什么CPU上,也就是说,我们必须知道CPU使用的指令集。
操作系统是用户与计算机之间的接口软件。不同的操作系统支持不同的CPU。严格来说,不同的操作系统支持不同的CPU指令集。但问题是,原来的Mac操作系统只支持PowerPC,不能安装在英特尔上。我们该怎么办?因此,苹果必须重写其Mac操作系统来支持这一变化。最后,我们应该知道不同的操作系统支持不同的CPU指令集。现在windows、Linux、MAC和Solaris都支持Intel和AMD CPU指令集。
如果你想开发一个程序,首先应该确定:
1.CPU类型,即指令集类型;
2.操作系统;我们称之为软硬件平台的结合。也可以说“平台=CPU+OS”。而且由于主流操作系统支持主流CPU,有时操作系统也被称为平台
机器无法识别Java源代码。它需要编译成一个.Class字节码文件,由编译器在JVM中执行,然后由解释器进行解释和运行。
即:Java源文件(.java) – Java编译器 --> Java字节码文件 (.class) – Java解释器 --> 执行。
流程图如下:
Java中字符只以一种形式存在:Unicode。字符转换发生在JVM和OS交界处(Reader/Writer)。
最后生成的class文件由以下部分组成:
通常,我们编写的Java源代码在编译后会生成一个Class文件,称为字节码文件。Java虚拟机负责将字节码文件翻译成特定平台下的机器代码,然后运行。简言之,java的跨平台就是因为不同版本的 JVM。换句话说,只要在不同的平台上安装相应的JVM,就可以运行字节码文件(.class)并运行我们编写的Java程序。在这个过程中,我们编写的Java程序没有做任何改动,只是通过JVM的“中间层”,就可以在不同的平台上运行,真正实现了“一次编译,到处运行”的目的。JVM是跨平台的桥梁和中间件,是实现跨平台的关键。首先将Java代码编译成字节码文件,然后通过JVM将其翻译成机器语言,从而达到运行Java程序的目的。因此,运行Java程序必须有JVM的支持,因为编译的结果不是机器代码,必须在执行前由JVM再次翻译。即使您将Java程序打包成可执行文件(例如。Exe),仍然需要JVM的支持。
注意:编译的结果不是生成机器代码,而是生成字节码。字节码不能直接运行,必须由JVM转换成机器码。编译生成的字节码在不同的平台上是相同的,但是JVM翻译的机器码是不同的。
JVM------Java Virtual Machine.JVM是Java平台的基础,与实际机器一样,它有自己的指令集,并在运行时操作不同的内存区域。它相当于一台独立的机器。JVM的主要工作是向CPU指令集或相应的系统调用解释自己的指令集(即字节码),从而保护用户不受恶意程序的骚扰。JVM不关心上层java源文件,它关注的只是由源文件生成的类文件(.class文件)。
JRE----java runtime environment.光有JVM还不能让class文件执行,因为在解释class的时候JVM需要调用解释所需要的类库lib。在JDK的安装目录里你可以找到jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和lib和起来就称为jre.
JDK—java development kit.
JDK的安装目录:
bin: 最主要的是编译器(javac.exe)
include: java和JVM交互用的头文件
lib:类库
jre: java运行环境
JDK用于Java程序开发,而JRE是一个只能运行class而没有编译的功能。
如有其它问题,欢迎大家留言,让我们一起讨论,一起学习,一起进步。