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