JDK 蕴含了 JRE,JRE 蕴含了 JVM
- JDK:java 开发工具包, 针对 java 开发人员, 能够编译运行 java 程序
- JRE:java 运行时环境, 针对应用 java 程序的客户, 能够运行字节码(.class), 然而不能编译 Java 源码
- JVM: 用来解释执行字节码文件(.class), 但不能正确的执行
什么是 JVM
JVM 是 JRE 的一部分, 是虚构进去的一台计算机. 通过实体计算机仿真各种计算性能来实现,JVM 有本人欠缺的硬件架构, 如处理器, 堆栈, 寄存器等, 还有相应的指令集.JVM 是 Java 跨平台的外围,Java 程序通过 JVM 的跨平台, 从而使 Java 程序跨平台.Java 程序首选会被编译成字节码文件 (.class),JVM 的外围工作就是解释字节码文件(.class) 并映射到实在 CPU 指令集或者零碎调用.JVM 不关系下层 Java 程序, 只关系字节码(.class).
什么是 JRE
JRE 是 Java 运行环境, 所有 Java 程序必须依赖 JRE 能力运行. 只有 JVM 是不能运行字节码文件的 (.class), 因为解释的字节码的时候须要 lib 库. JRE 外面有两个文件夹
bin/
,lib/
。bin/
就是 JVM,lib
就是 JVM 所须要库。JVM+lib
=JRE
什么是 JDK
JDK 是 Java 的外围, 蕴含运行 Java 运行环境 (JRE) 和一些 Java 工具及 Java 根底类库。
JDK 提供的工具
appletviewer.exe* java-rmi.exe* jrunscript.exe* policytool.exe*
extcheck.exe* javaw.exe* jsadebugd.exe* rmic.exe*
idlj.exe* javaws.exe* jstack.exe* rmid.exe*
jabswitch.exe* jcmd.exe* jstat.exe* rmiregistry.exe*
jar.exe* jconsole.exe* jstatd.exe* schemagen.exe*
jarsigner.exe* jdb.exe* jvisualvm.exe* serialver.exe*
java.exe* jdeps.exe* keytool.exe* servertool.exe*
javac.exe* jhat.exe* kinit.exe* tnameserv.exe*
javadoc.exe* jinfo.exe* klist.exe* unpack200.exe*
javafxpackager.exe* jjs.exe* ktab.exe* vcruntime140.dll*
javah.exe* jli.dll* native2ascii.exe* wsgen.exe*
javap.exe* jmap.exe* orbd.exe* wsimport.exe*
javapackager.exe* jps.exe* pack200.exe* xjc.exe*
Java Api 是 Java 的利用程序接口, 外面有很多写好的 Java Class, 蕴含一些重要的语法结构以及根本图形,网络和文件 IO, 咱们能够间接调用。
总结
- 有 JVM 和 lib 库 (JRE) 就能够执行字节码 (.class) 文件(Java 程序)
- 有 JRE 能够运行 (Java 程序) 然而还不能开发 Java 程序,须要 JDK(JRE+ 开发工具)才能够
windows 装置 jdk
会发现有两个目录, 其实只须要 jdk1.8.0_91
就能够, 里面包好了 jre,jre1.8.0_91
是 JDK 独自提供一个一个运行环境
两个目录 jre 的区别
- 相同点: 这两个 JRE 都能够作为 Java 程序的运行环境
- 不同点:JDK 只能应用本人目录自带的 JRE, 不能应用里面独自装置的 JRE
开发到运行
装置 JDK 环境,调用本地的 Java api 实现业务代码, 通过 JDK 的编译器 (javac) 编译成字节码(.class), 而后在 JRE 上运行这些 JAVA 字节码,JVM 解释这些字节码, 映射到 CPU 指令集或者零碎调用。