作为一个java开发者,在入门的第一天开始就会被要求搭建环境,必然就会接触到JDK,JRE,虚拟机(jvm)这三个以后会经常挂在嘴边的名词,那么这三个东西到底是什么呢?他们之间又有什么样的关系呢?别急,往下看!!!

在开始叙述三者之间的关系时,我们先来看一张图:

jdk与jre与jvm三者的关系(深入理解Java虚拟机系列)(1)

图来自oracle官网

从官网的概念图可以看出,他们之间存在了一种包含关系,JDK包含了JRE,JRE包含了(JVM)。或许他们的关系应该是这样的:

jdk与jre与jvm三者的关系(深入理解Java虚拟机系列)(2)

JDK,JRE,JVM三者之间的包含关系

三者之间呈现出来的包含关系应该是一目了然了,那么这三个东西到底是干嘛用的呢?继续往下走!!!

JDK:从关键字 Development可以看出,这是针对我们开发者提供的,它就是一个Java语言的软件开发工具包,从官网的图上我们也可以看到,除了包括JRE之外,它提供了很多的工具组件,这里给大家介绍几个比较常用的工具。

javac-编译器,用于将我们所写的.java源文件编译成为可运行的.class的字节码文件,初学时用记事本写代码也是玩过好多次了。

java:用于运行编译好的.class文件。

jar:打包工具,用于将相关类文件打成一个.jar的包文件和运行.jar文件,打包命令为:jar cvf hello.jar Hello.class,运行命令为:jar -jar hello.jar args(运行的jar包中main函数的参数,可以省略)。

javadoc:文档生成器,用于从java源码中提取注释生成文档。

javap:java反汇编器,显示编译之后的类文件中的可访问功能和数据,同时显示字节码含义。

Jconsole:java进行系统调试和监控的工具,运行jconsole后可以看到运行在虚拟机上的线程和内存的运行情况,如图:

jdk与jre与jvm三者的关系(深入理解Java虚拟机系列)(3)

jconsole(java可视化监控工具)

JRE:Java Runtime Environment(Java 运行时环境),这里运行的是通过javac编译之后的可运行的程序,所以它并不包含JDK所包含的工具组件,它包含了java的核心类库和支持文件,在编写程序时需要引入的包或类都存在于JRE中,同时也包含了JVM,这是必须的,因为java程序必然要跑在JVM上的。所以我们开发完成之后的所有程序都是运行在JRE的环境中的。

JVM:Java虚拟机,顾名思义,就是虚拟出来的计算机,它是通过在真机上模拟各种各种计算机的功能实现的,用于运行我们的Java程序,java的平台无关性就是来源于此。运行java程序时使用统一的规范,是我们的java程序只需要遵循JVM的标准,但是底层在不同的平台上使用不同的实现方式去兼容平台。屏蔽了平台对java程序的可见性,只需要关注虚拟机的规范即可,这就实现了java平台无关性,一处开发,处处使用的强大特性。我理解的概念应该是这样的:

jdk与jre与jvm三者的关系(深入理解Java虚拟机系列)(4)

jvm概念图

小编也走在技术的道路上,如有不当之处或读者有不同见解,欢迎留言探讨。

,