jvm跟jdk跟jre的不同和关系

做了许久的java开发,是不是还没弄清这三者的关系?

1、JVM -- java virtual machine
       JVM就是我们说的java虚拟机,它是java实现跨平台的核心部分。java程序会首先被编译为.class的类文件,这种类文件可以在java虚拟机上执行,也就是说class并不直接与机器的操作系统相交互,而是通过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行,而本地系统又解释给CPU执行。所以java程序和CPU之间是隔了JVM和平台操作系统。所以JVM其实是操作系统上运行的一个程序。

2、JRE -- java runtime environment
       JRE指的是java运行时环境。光有JVM还不能让.class文件执行,因为在解释class的时候JVM需要调用解释所需要的类库(lib)。在JDK的安装目录里你会发现有jre目录,jre目录中有文件夹bin和lib,在这里可以认为bin里的文件就是jvm,他们很多都是.exe/.dll结尾(windows下),所以它是可执行程序(JVM),lib中则是jvm工作所需要的类库,可以看到很多.jar文件,而jvm和lib合起来就是jre了。所以,在你写完java程序编译成.class之后,把.class文件和jre一起打包,然后再写一个用来引导程序启动的cmd文件,再一起打包,这样你就可以在其他没有安装jre的windows运行你写程序了(jre里有运行.class的java.exe)。
3、JDK -- java development kit
       JDK是java开发工具包,基本上每个学java的人都会先在机器上装一个JDK,那他都包含哪几部分呢?让我们看一下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而没有编译的功能。

       eclipse、idea等其他IDE有自己的编译器而不是用JDK bin目录中自带的,所以在安装时你会发现他们只要求你选中jre路径就ok了。

 

posted @ 2013-10-24 22:35  邓庚的博客  阅读(393)  评论(0编辑  收藏  举报