一、概念
JDK:Java Development Kit。即Java开发工具,其中包含了Java运行环境、Java工具和Java基础类库。
JRE:Java Runtime Enviroment。即Java运行环境,包含JVM以及Java核心类库。
JVM:Java Virtual Machine。即Java虚拟机,是整个Java平台最关键的部分,用来运行Java程序。
背景:和其他程序不同,Java程序由JDKjavac
编译成class文件的,然后在JRE环境(虚拟机JVM+lib核心文件jar)下运行,由虚拟机解释成机器语言。同时,每个操作系统的jvm都不一样,因此能让Java 程序在各大操作系统中运行。
<br />
二、 关系
1. 在安装JDK的时候会附带一个JRE询问是否安装,同时安装好的JDK目录下也有一个jre
目录。为什么会存在2个JRE,他们是什么区别呢?
答:
JRE是Java运行环境,而JDK是包含了Java运行环境和诸多Java工具基础类库的开发工具。
因此,很多人可能已经明白了:JDK下的工具都是Java写的,而要运行这些程序,就需要JRE,因此jre
是给开发人员使用的,当开发人员使用了JDK工具,写了程序,当然就需要JRE来运行。而如果当用户只需要运行Java程序的时候,单独的JRE就足够了。工作职责不同
也因此,只有在JDK的jre目录下存在用来编译的javac.exe
文件,而单独JRE下的无法查看api
<br />
2. 在JRE下的lib
和JDK下的/jre/bin
目录中存在的client
和server
目录中的jvm.dll。他们又是什么区别呢?
答:
server与client下jvm.dll的差别在于所使用的vm不同,执行java程序时默认的是client VM。若使用server VM,会花比较长的启动时间及消耗较多的内存,为的是启动程序后可以获得较好的执行性能。
<br />
3. JDK、JRE中共有3个bin
目录,他们有什么区别?
答:
JDK下的lib
包括Java开发需要的jar包,JDK下的一些工具可能用到该目录中的文件,比如编译器。
JRE下的lib
包括Java运行需要的jar包,是给JVM运行使用,包括所有标准类和扩张类。
JDK下的JRE中的lib
是开发环境中,给JVM运行使用的jar包。当导入外部jar包时,因为系统需要编译,会调用JDK的编译器,同时由于运行需要,会需要JVM虚拟机运行程序。
<br />
4.Java环境配置时的path和classpath有什么用
答:
path是给JDK的工具提供的,是为了能在cmd中通过直接敲命令执行的。
classpath是为Java程序用到的库文件所设的,是资源库。因此当我们在开发中需要其他jar包,就要将他们加到classpath中。
<br />
5.javac和java有什么区别?
答:
Javac是把Java文件编译成class,Java是执行class文件。
在命令行中javac -version
是JDK版本,java -version
是JRE版本。所有可以通过修改path,改变系统默认的JDK版本和JRE版本。【where java】能查看本机上所有的java命令路径
一般默认JRE使用JDK下的JRE。