JAVA中关于JDK/JRE/JVM的含义
程序员的碎碎念–
或许我还算不上是一个合格的程序员,今天练习打字,打字速率只有100/min
学了那么久的java需要知道Java是怎么去运行的—不然怎么能了解java呢?
我们从开始接触JAVA,一般是从Helloworld.java开始的,刚开始只是让我们去照着模仿,并没有关心它是怎么运行的,今天我整理一下他是怎么运行的–如有不当之处还请大佬指出,万分感谢;
JDK–也就是我们常说的java开发环境–开发人员使用
JRE–也就是java运行环境–普通用户使用,开发人员也需要用
JVM–也就是我们常说的java虚拟机
三者关系如下
我们可以发现jre和jdk都包含了jvm和核心类库,我们来看一下jre和jdk安装目录
先看jdk安装目录–
此上图中的jre目录下包含如下文件—
我们来看jre安装目录
可以发现两个文件夹下内容是一样的;
接下来我们回顾一下 helloworld.java是怎样运行的
经过javac编译生成字节码文件–helloworld.class 然后交给java去解析在jvm上运行;
以下是一段代码,javac April.java编译之后生成April.class文件, 然后java April 执行
那么他是怎么执行的呢?
我们来先修改一下安装目录中的tools.jar文件名为tools1.jar,我们在尝试编译和运行一下,
会提示找不到或无法加载主类(jdk1.8之后找不到tools.jar,和dt.jar),我们在配置java环境是也可以看出来,classpath在jdk1.9之后可以不配置也可以运行,但是jdk1.8不行
:dt.jar和tools.jar是两个java最基本的包,里面包含了从java最重要的lang包到各种高级功能
我们写的类是先从主方法main处开始运行的,path下面的bin里面都是java的可执行的编译器及其工具,如java,javadoc等,报错的原因就是输入的javac的命令不是去JDK中bin目录去找的javac.exe,而是去JDK中lib目录中的tools.jar中com.sun.tools.javac.Main中执行,tools.jar运行时先找tools.jar中com.sun.tools.javac.Main中执行
因为JDK负责开发java,JDK内部也是由java语言开发的,也要运用到jre去执行Java代码,所以jdk本身也需要一套jre
可以将bin理解为jvm,lib理解为类库,单独一个jvm或者类库是没法运行的,所以class文件在jvm中也是不能运行的,因为还需要类库的支持,jvm会调用类库—》通过jvm.dll来动态链接到类库
总结—
以上内容是根据jdk1.8来写的