JDK、JRE、JVM三者间的关系
JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的核⼼,包括了Java运⾏环境JRE、Java⼯具和Java基础类
库。Java Runtime Environment(JRE)是运⾏JAVA程序所必须的环境的集合,包含JVM标准实现及Java核⼼类库。JVM是Java Virtual Machine(Java虚拟机)的缩写,是整个java实现跨平台的最核⼼的部分,能够运⾏以Java语⾔写作的软件程序。
在计算机开发语⾔的历史中,从来没有哪种语⾔象Java那样受到如此众多⼚商的⽀持,有如此多的开发⼯具。
JDK(Java Development Kit)java类的概念
JDK是Java开发⼯具包,是Sun Microsystems针对Java开发员的产品。
JDK中包含JRE,在JDK的安装⽬录下有⼀个名为jre的⽬录,⾥⾯有两个⽂件夹bin和lib,在这⾥可以认为bin⾥的就是jvm,lib中则是jvm⼯作所需要的类库,⽽jvm和 lib和起来就称为jre。
JDK是整个JAVA的核⼼,包括了Java运⾏环境JRE(Java Runtime Envirnment)、⼀堆Java⼯具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。
①SE(J2SE),standard edition,标准版,是我们通常⽤的⼀个版本,从JDK 5.0开始,改名为Java SE。
②EE(J2EE),enterprise edition,企业版,使⽤这种JDK开发J2EE应⽤程序,从JDK 5.0开始,改名为Java EE。
③ME(J2ME),micro edition,主要⽤于移动设备、嵌⼊式设备上的java应⽤程序,从JDK 5.0开始,改名为Java ME。
Java Runtime Environment(JRE)
是运⾏基于Java语⾔编写的程序所不可缺少的运⾏环境。也是通过它,Java的开发者才得以将⾃⼰开发的程序发布到⽤户⼿中,让⽤户使⽤。
RE中包含了Java virtual machine(JVM),runtime class libraries和Java application launcher,这些是运⾏Java程序的必要组件。
与⼤家熟知的JDK不同,JRE是Java运⾏环境,并不是⼀个开发环境,所以没有包含任何开发⼯具(如编译器和调试器),只是针对于使
⽤Java程序的⽤户。
JVM(java virtual machine)
就是我们常说的java虚拟机,它是整个java实现跨平台的最核⼼的部分,所有的java程序会⾸先被编译为.class的类⽂件,这种类⽂件可以在虚拟机上执⾏。
也就是说class并不直接与机器的操作系统相对应,⽽是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执⾏。
只有JVM还不能成class的执⾏,因为在解释class的时候JVM需要调⽤解释所需要的类库lib,⽽jre包含lib类库。
JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需⽣成在Java虚拟机上运⾏的⽬标代码(字节码),就可以在多种平台上不加修改地运⾏。
初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,⾸先从概念上理解⼀下吧,JDK(Java Development Kit)简单理解就是Java开发⼯具包,JRE(Java Runtime Enviroment)是Java的运⾏环境,JVM( java virtual machine)也就是常常听到Java虚拟机。JDK是⾯向开发者的,JRE是⾯向使⽤JAVA程序的⽤户,上⾯只是简单的区别,⼀般⽹上好多都讲概念,我就不讲了,直接截图应该会更清晰⼀点,我安装的JDK1.8,效果如图:
JDK和JRE
通过上图发现发现有两个JRE⽂件夹,如果细看⾥⾯的内容基本上是⼀样的,如果是只是Java程序使⽤者,那么只会有最外层的那个JRE⽬录,JDK中是JRE⾃带的,你如果安装了JDK必然⾥⾯会有⼀个JRE.那么问题来了,为什么会有两套JRE呢?
最开始使⽤JAVA的时候设置JAVA环境变量的时候除了设置JAVA_Home中JDK的路径之外,还会需要
设ClassPath,%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;dt.jar和tools.jar是两个java最基本的包,⾥⾯包含了从java最重要
的lang包到各种⾼级功能如可视化的swing包,是java必不可少的。⽽path下⾯的bin⾥⾯都是java的可执⾏的编译器及其⼯具,
如java,javadoc等,你在任意的⽂件夹下⾯运⾏cmd键⼊javac,系统就能⾃动召见java的编译器就是归功于这个环境变量的设置;如果修改其中tools.jar的名字,cmd运⾏的时候会报错:
报错的原因就是输⼊的javac的命令不是去JDK中bin⽬录去的,⽽是去JDK中lib⽬录中的tools.jar中ls.javac.Main中执⾏,因此只是⼀个包装器(Wrapper),存在的⽬的是为了让开发者免于输⼊过长的指命。这个时候发现JDK⾥的⼯具⼏乎是
⽤Java所编写,同属于Java应⽤程序,因此要使⽤JDK所附的⼯具来开发Java程序,所以⾃⾝需要附⼀套JRE才能运⾏。上图中与jdk同级⽬录下的JRE就是⽤来运⾏⼀般Java程序⽤的。
两套JRE运⾏的时候究竟运⾏哪⼀个呢,这个时候JDK中先从⾃⾝⽬录中,然后⽗级⽬录中,如果都没有就去注册表中:
所以的运⾏结果与你的电脑⾥⾯哪个JRE被执⾏有很⼤的关系,JDK和JRE应该算是说完了,下⾯说说JRE和JVM.
JRE和JVM
JVM -- java virtual machineJVM就是我们常说的java虚拟机,它是整个java实现跨平台的最核⼼的部分,所有的java程序会⾸先被编译
为.class的类⽂件,这种类⽂件可以在虚拟机上执⾏,class⽂件并不直接与机器的操作系统相对应,⽽是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执⾏,类似于C#中的CLR。
JVM不能单独搞定class的执⾏,解释class的时候JVM需要调⽤解释所需要的类库lib。在JDK下⾯的的jre⽬录⾥⾯有两个⽂件夹bin和lib,在这⾥可以认为bin⾥的就是jvm,lib中则是jvm⼯作所需要的类库,⽽jvm和 lib和起来就称为jre。JVM+Lib=JRE,如果讲的具体点就是bin⽬录下的jvm.dll⽂件, jvm.
dll⽆法单独⼯作,当jvm.dll启动后,会使⽤explicit的⽅法(就是使⽤Win32 API之中
的LoadLibrary()与GetProcAddress()来载⼊辅助⽤的动态链接库),⽽这些辅助⽤的动态链接库(.dll)都必须位于jvm.dll所在⽬录的⽗⽬录之中。因此想使⽤哪个JVM,只需要设置PATH,指向JRE所在⽬录下的jvm.dll。
JDK在⽬前为⽌还是模糊的概念,这个时候可以通过JDK的⽬录⽂件来看下:
在⽬录下⾯有五个⽂件夹、⼀个src类库源码压缩包和⼏个声明⽂件,其他五个⽂件夹分别是:bin、db、include、lib、 jre,db这个⽂件看业务需求~
bin:最主要的是编译器();
db:jdk从1.6之后内置了Derby数据库,它是是⼀个纯⽤Java实现的内存数据库,属于Apache的⼀个开源项⽬。⽤Java实现的,所以可以在任何平台上运⾏;另外⼀个特点是体积⼩,免安装,只需要⼏个⼩jar包就可以运⾏了。
include:java和JVM交互⽤的头⽂件;
lib:常⽤类库
jre:java运⾏环境
JDK包含JRE,⽽JRE包含JVM,总的来说JDK是⽤于java程序的开发,⽽jre则是只能运⾏class⽽没有编译的功能,Eclipse、IntelliJ IDEA等其他IDE有⾃⼰的编译器⽽不是⽤JDK bin⽬录中⾃带的,所以在安装时只需选中jre路径就ok了,最后⽤张⽹络图⽚总结下吧:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论