乐趣区

关于jdk:JVMJREJDK之间的区别和联系

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 指令集或者零碎调用。

退出移动版