(1) JVM
2016-07-29 19:23
417 查看
JVM,Java Virtual Machine,Java虚拟机,是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象的硬件,如处理器、堆栈、寄存器、还有相应的指令系统(对于类Java程序JVM就是一台计算机)。JVM的存在使得Java语言得以实现跨平台,因为Java程序只要面对JVM即可,而JVM则负责面对不同OS,用户只要安装JRE(后面会讲到)即可在不同OS上运行Java程序。
说是虚拟机,但JVM其实只是一种规范,它只是说明了虚拟机的构成需要哪些部件组成,这些部件需要完成哪些功能,有哪些规格需要遵守,可以理解为,JVM是一个接口,具体的实现由具体的产商自己实现(这也就是为什么JVM有各种版本的说,比如GC算法的不同,内存划分的不同等等)。
为什么说是类Java语言呢?是因为,JVM的目标不只是跨平台,还有跨语言,不止Java可以运行在JVM上,其他语言,只要提供相应的编译器,都可以运行在上面。这很好理解,JVM能理解的就一种,JVM的字节码,那想办法把其他的语言编译成这种字节码不就成了吗?事实上也确实是这样做的(开发各种语言的对应编译器)。(至于为什么其他语言要这样做,可以查看:http://www.zhihu.com/question/20003582,或者自行百度。。。)
再说下,SDK,JDK,JRE,JVM之间的关系,简单地说:SDK 包含 JDK 包含 JRE 包含 JVM。
再简单详细的说明:
JDK = JRE + Java开发工具:开发工具包括编译器、反汇编、监控分析器等,能完整开发运行测试Java程序。这些工具位于JDK目录下的bin目录下。(JDK也分为J2SE,J2ME,J2EE,分别是Java标准版,Java移动版,Java企业版)
JRE = JVM + Java语言核心类库:光有JVM是不能运行Java字节码文件的,还必须要有相关的库文件,比如Object类得有吧,ClassLoader类得有吧,等等。JRE位于JDK目录下的jre文件夹,jre文件夹下的lib文件就是Java语言核心类库文件所在。
JRE是运行环境,想要运行Java程序必须要有JRE,而JDK,Java软件开发包,是开发环境,还要编译啊,监控啊,分析啊等其他工作,当然,肯定要运行Java程序然后进行测试,要运行,就必须得有JRE(所以JDK下有JRE)。
那JVM位于哪里呢?有两个地方,一个是JDK/bin/java,一个是JDK/jre/bin/java。为什么会有两个呢?是因为JDK那些工具本身就是Java编写的,我们知道,想要运行Java程序必须得有JRE,所以,前者就是用来运行JDK/bin/下那些Java开发工具的,而后者才是运行你开发出来的或其他引进来的Java程序。(为什么不放在一起呢,是为了分工明确?但本质上两个JVM是没区别的,JDK/bin/java只有JVM,要运行那些工具依赖的库应该是在JDK/lib目录下,因为只运行这些工具,不需要全部类库。)
以上只是博主的查阅及自身理解,后续将不断更新。
找到一篇不错的文章,可以看下:java之jvm学习笔记十三(jvm基本结构)(
keycoding)(2016-10-08)
JVM的运行原理以及组成结构将会在下一节详细分析理解。
说是虚拟机,但JVM其实只是一种规范,它只是说明了虚拟机的构成需要哪些部件组成,这些部件需要完成哪些功能,有哪些规格需要遵守,可以理解为,JVM是一个接口,具体的实现由具体的产商自己实现(这也就是为什么JVM有各种版本的说,比如GC算法的不同,内存划分的不同等等)。
为什么说是类Java语言呢?是因为,JVM的目标不只是跨平台,还有跨语言,不止Java可以运行在JVM上,其他语言,只要提供相应的编译器,都可以运行在上面。这很好理解,JVM能理解的就一种,JVM的字节码,那想办法把其他的语言编译成这种字节码不就成了吗?事实上也确实是这样做的(开发各种语言的对应编译器)。(至于为什么其他语言要这样做,可以查看:http://www.zhihu.com/question/20003582,或者自行百度。。。)
再说下,SDK,JDK,JRE,JVM之间的关系,简单地说:SDK 包含 JDK 包含 JRE 包含 JVM。
再简单详细的说明:
JDK = JRE + Java开发工具:开发工具包括编译器、反汇编、监控分析器等,能完整开发运行测试Java程序。这些工具位于JDK目录下的bin目录下。(JDK也分为J2SE,J2ME,J2EE,分别是Java标准版,Java移动版,Java企业版)
JRE = JVM + Java语言核心类库:光有JVM是不能运行Java字节码文件的,还必须要有相关的库文件,比如Object类得有吧,ClassLoader类得有吧,等等。JRE位于JDK目录下的jre文件夹,jre文件夹下的lib文件就是Java语言核心类库文件所在。
JRE是运行环境,想要运行Java程序必须要有JRE,而JDK,Java软件开发包,是开发环境,还要编译啊,监控啊,分析啊等其他工作,当然,肯定要运行Java程序然后进行测试,要运行,就必须得有JRE(所以JDK下有JRE)。
那JVM位于哪里呢?有两个地方,一个是JDK/bin/java,一个是JDK/jre/bin/java。为什么会有两个呢?是因为JDK那些工具本身就是Java编写的,我们知道,想要运行Java程序必须得有JRE,所以,前者就是用来运行JDK/bin/下那些Java开发工具的,而后者才是运行你开发出来的或其他引进来的Java程序。(为什么不放在一起呢,是为了分工明确?但本质上两个JVM是没区别的,JDK/bin/java只有JVM,要运行那些工具依赖的库应该是在JDK/lib目录下,因为只运行这些工具,不需要全部类库。)
以上只是博主的查阅及自身理解,后续将不断更新。
找到一篇不错的文章,可以看下:java之jvm学习笔记十三(jvm基本结构)(
keycoding)(2016-10-08)
JVM的运行原理以及组成结构将会在下一节详细分析理解。
相关文章推荐
- JDK动态代理VS CgLib
- Java 6 JVM参数选项大全(中文版)
- Ubuntu 安装 JDK 问题
- 深入解析JVM对dll文件和对类的装载过程
- jdk与jre的区别 很形象,很清晰,通俗易懂
- jdk中String类设计成final的原由
- win7下安装 JDK 基本流程
- jdk环境变量配置
- win2003 jsp运行环境架设心得(jdk+tomcat)
- windows linux jdk安装配置方法
- Java编程之jdk1.4,jdk1.5和jdk1.6的区别分析(经典)
- JVM Tomcat性能实战(推荐)
- 详解JDK 5 Annotation 注解之@Target的用法介绍
- Java虚拟机JVM性能优化(二):编译器
- Java程序员必须知道的5个JVM命令行标志
- 简单记录Cent OS服务器配置JDK+Tomcat+MySQL
- 学习JVM之java内存区域与异常
- Android开发的IDE、ADT、SDK、JDK、NDK等名词解释
- Java4Android开发教程(一)JDK安装与配置