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的开发工具
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的开发工具
相关文章推荐
- java 内部类 和 匿名内部类
- java成员方法
- Win7 64位安装JDK的步骤,并且附上测试程序
- java初始化之变量初始化
- Java super和this的异同总结
- spring05 spring的配置信息
- java中的包
- spring04 数据库操作 spring+jdbc/hibernate 及其声明式事务处理
- (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
- spring03 AOP、各种通知、一/多个切面例子
- spring02 注解方式实现MVC、spring的继承、代理模式(静/动) :jdk动态代理,cglib动态代理
- spring01 环境搭建、控制反转、依赖注入、springIOC和DI实现MVC模式
- eclipse(ini)
- Eclipse下设置github开发环境
- JAVA坏境变量中的JAVA_HOME path classpath 的设置与作用
- java语言jdk下载、安装,环境变量的搭载
- 使用Java开发自动化检测域名是否可注册工具 推荐
- JSTL标签,EL表达式,OGNL表达式,struts2标签 汇总
- 三杯水问题 算法分析、设计与实现(Java)
- Flexigrid的使用(整合Struts2)