写点什么

JVM,JRE,JDK 之间的区别和联系

用户头像
入门小站
关注
发布于: 2020 年 12 月 05 日


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


发布于: 2020 年 12 月 05 日阅读数: 54
用户头像

入门小站

关注

还未添加个人签名 2020.01.18 加入

还未添加个人简介

评论

发布
暂无评论
JVM,JRE,JDK之间的区别和联系