JDK(java development kit)


开发工具包。 是整个Java的核心。


开发环境(javac等)和 运行环境(JVM和核心类库)。



JDK的安装目录下有六个文件夹,其中,真正在运行java程序时起作用的是四个文件夹:


bin: javac.exe编译器


include:Java和jvm交互用的头文件


lib: 类库


jre: 运行环境


JRE(Java runtime environment)


java运行环境。包括java虚拟机(JVM)、Java平台核心类和支持文件,但是不包括开发工具(编译器、调试器等)。


所以只是面向Java程序的使用者。如果只安装JRE,则系统只能运行Java程序。



JVM(Java virtual machine)


Java虚拟机,Java跨平台的核心。


JDK-->JRE-->Bin目录下有两个文件夹:server与client,这是 真正的jvm.dll所在



JVM作用:解释由JDK生成的指令集(即字节码)给系统,保护用户免被恶意程序骚扰。


模拟实际处理器的结构,解释字节码。


Java程序编译原理


.class文件,JVM将.class文件解释给系统。




Java 程序的字节码文件可以放到任意装有 JRE 的计算机运行,再由不同 JRE 的将它们转化成相应的机器代码,这就实现了 Java 程序的可移植性。传统的编译方法,先转化到字节码( bytecode ) 这种特殊的中间形式,字节码再转换成机器码或系统调用。生成的机器代码就不可避免地跟特殊的操作系统和特殊的机器结构相关。




联系与区别


简单理解:JDK包含JRE,JRE包含JVM。


Java应用程序和操作系统之间增加了一层虚拟层——JRE



安装JDK后,会有两套JRE,JRE本身和JDK中的JRE。两者到底什么区别?


为什么Sun要让JDK安装两套相同的JRE?


因为JDK里面有很多用Java所编写的开发工具(如javac.exe、jar.exe等),而且都放置在/lib/tools.jar里。


javac.exe只是一个包装器(Wrapper),而制作的目的是为了让开发者免于输入太长的指命。


可以发现/lib目录下的程序都很小,不大于29K,从这里我们可以得出一个结论。就是JDK里的工具几乎是用Java所编写,所以也是Java应用程序,因此要使用JDK所附的工具来开发Java程序,也必须要自行附一套JRE才行,所以位于JDK目录下的那套JRE就是用来运行一般Java程序的。