java如何实现跨平台

Java 虚拟机(Java Virtual Machine,简称 JVM)是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java 虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。JVM 屏蔽了与具体操作系统平台相关的信息,使 Java 程序只需生成在 Java 虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM 在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。

(JVM,也就是 Java 虚拟机,就是一个平台,包含于 JRE 的下面。当你需要执行某个 Java 程序时,由 JVM 帮你进行编译和执行。我们编写的 Java 源码,编译后会生成一种 .class 文件,称为字节码文件。Java 虚拟机就是负责将字节码文件翻译成特定平台下的机器码然后运行.)

java开发人员一定非常熟悉Jdk(Java Development Kit),jre(Java Runtime Rnvironment,Java运行环境),jvm(Java Virtual Machine,即Java虚拟机).

Java的平台无关性就离不开 jvm(java虚拟机):

Jvm(java虚拟机)就是一个平台,是一种用于计算机设备的规范,他是一个虚拟出来的计算机,通过在实实在在存在的计算机上模拟真正的计算机的各种功能来实现的;

java虚拟机有一套字节码指令集,一组寄存器,一个栈,一个垃圾回收堆和一个存储方法域.

Jvm屏蔽了与具体操作系统平台的相关信息,java程序只需要在jvm(java虚拟机)上生成jvm(java虚拟机)所能运行的字节码(目标代码),就可以在任何平台上执行java代码.实际上,jvm最终把字节码解释成具体的机器指令执行

也就是说当你执行java是程序时,由jvm帮我们编译和执行,jvm先将我们的java程序编译成.class文件,也就是字节码文件,在有jvm将字节码文件翻译成不同平台所支持的机器码然后运行)

JDK,JRE,JVM的关系

Jdk(Java Developement Kit)是java的核心,包含运行java运行环境(jre)和java工具类以及java基础类库.是java的开发工具包.

在jdk的目录下一共有六个文件夹,一个是src类库源码压缩包,和其他几个声明文件.其中真正运行java时起作用的是

(jdk中的文件,与jre不同)

bin:最主要的是编译器(javac.exe),

include: java和jvm交互用的头文件,

lib:类库,

jre:java运行环境.

jdk包含jre,jre包含jvm.

Jre(Java Runtime Environment,java运行环境),包含jvm标准实现及java核心类库.jre是java运行环境,并不是一个开发环境,所以没有任何开发工具(如编译器和调试器).

jre是指java运行环境.光有jvm还不能成class的执行,因为在解释class的时候,jvm需要调用解释所需要的类库lib.(jre中有运行.class的java.exe).

jre是运行java程序必不可少的(除非用其他一些编译环境编译成.exe文件......)jre的地位就像pc机一样,我们写好的Win64应用程序需要操作系统帮我们运行,同样的我们编写的java程序必须也需要jre才能运行.

Jvm(Java Virtual Machine),即java虚拟机,java运行时的环境,jvm是一种用于计算机设备的规范,他是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的.针对java用户,也就是拥有可运行的.class文件包(jar或war)的用户.里面主要包含jvm和java运行时基本类库(rt.jar).rt.jar可以简单粗暴的理解为:它就是java源码编译成的jar包.java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令.这就是java能够一次编译到处运行的原因.

Jdk,Jre,Jvm的关系

1.三者联系:

jvm不能单独搞定.class的执行,解释.class的时候,jvm需要调用解释所需要的lib.在jdk下面的jre目录里有两个文件夹(bin和lib),在这里可以认为bin里的就是jvm,lib中则是jvm工作时所需要的的类库,而jvm和lib合起来就成为jre.jvm+lib=jre;总体来说,我们利用 Jdk(调用Java api)开发属于我们自己的java程序后,通过jdk中的编译程序(javac)将我们的文本java文件编译成java字节码,在jre上运行这些java字节码,jvm解析这些字节码,映射到cpu指令集或os的系统调用.

2.三者区别:

jdk和jre的区别:在bin文件夹下会发现,Jdk有javac.exe而jre里没有,javac指令是用来将java文件编译成.class文件的,这是开发者需要的,而用户(只需要运行的人)是不需要的.jdk还有jar.exe,javadoc.exe等等用于开发的可执行指令文件.这也证实了一个是开发环境,一个是运行环境.

jre和jvm的区别:jvm并不代表可以执行.class文件,jvm执行.class文件还需要jre下的lib类库的支持,尤其是rt.jar.

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐