您的位置:首页 > 编程语言 > Java开发

java编译运行详解

2016-01-02 11:18 387 查看
1,不同操作系统,java源程序编译生成的字节码是一样吗?

java编译生成的字节码,在所有操作系统都是一样,故其有这样的特点:

        write once, run anywhere.

2,不同操作系统,安装的java虚拟机是一样吗?

不同的操作系统,其java 虚拟机是不一样的。虚拟机将java字节代码转换对应操作系统的

相关指令,保证其正常运行,jvm会根据操作系统来解释运行成你当前操作系统可以识别的语言,所以JVM起了桥梁的作用,这也是为什么java是跨平台的特性。

3,java的编译器,解释器是在java虚拟机中吗?

编译器在JDK或JRE 的bin目录中,即javac.exe文件。java虚拟机在JRE中,解释器在java虚拟机中。

4,编译运行过程

所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。

Java字节码的执行需要经过以下3个步骤: 

(1)由类装载器(class loader)负责把类文件(.class文件)加载到Java虚拟机中。在此过程需要检验该类文件是否符合类文件规范。 

(2)字节码校验器(bytecode verifier)检查该类文件的代码中是否存在着某些非法操作,例如Applet程序中写本地计算机文件系统的操作。 

(3)如果字节码校验器检验通过,由Java解释器负责把该类文件解释成为机器码进行执行。

JRE-- java Runtime environment

JRE是指java运行环境。光有JVM还不能成class的执行,因为在解释class的时候JVM需要调用解释所需要的类库lib。jre目录里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。所以,在你写完java程序编译成.class之后,你可以把这个.class文件和jre一起打包发给朋友,这样你的朋友就可以运行你写程序了。 包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,

JDK -- java development kit

JDK是java开发工具包,JDK的安装目录下面有六个文件夹、一个src类库源码压缩包、和其他几个声明文件。其中,真正在运行java时起作用的是以下四个文件夹:bin、include、lib、 jre。现在我们可以看出这样一个关系,JDK包含JRE,而JRE包含JVM。

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

include:java和JVM交互用的头文件

lib:类库

jre:java运行环境(注意:这里的bin、lib文件夹和jre里的bin、lib是不同的)

总的来说JDK是用于java程序的开发,而jre则是只能运行class而没有编译的功能。 
JDK是提供给Java开发人员使用的,其中包含了java的开发工具, 包括编译工具(javac.exe) 打包工具(jar.exe)等 

JVM:将字节码文件转成具体系统平台的机器指令。 
JRE:JVM+Java语言的核心类库。 
JDK:JRE+Java的开发工具
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: