引言
我们如果要用Java编写程序的话就必须安装JDK,那么JDK是什么,另外安装JDK的同时,会提示用户需要安装JRE,一般这两个就像孪生兄弟一样,装了JDK之后,如果我们进入到安装路径下,会发现除了JDK外,还有一个文件夹JRE,那么什么又是JRE,最后都说Java是跨平台语言,因为它的代码是运行在一个叫做Java虚拟机上的,那么什么又是Java虚拟机呢,本文大致说明一下这三者的区别,关于Java虚拟机如果想深入了解,建议阅读《深入理解Java虚拟机》这本书,个人认为这本书写得很棒
说明
JDK
首先JDK是Java Development Kit的缩写,也就是Java开发工具箱的意思,它包含了各种库和类,比如如下图所示,当然也包括了JRE
另外多说一句,经常用到的用来编译Java文件的javac命令就是在JDK中的,利用JDK中的javac将.java文件编译成.class文件,然后再装入到Java虚拟机中,由Java运行环境执行,而运行java程序是由其中的java命令执行的
另外再多说一句,如果类指定了包名,那么编译的时候要加上-d选项,比如在当前目录下生成与包名相对应的目录层次的编译示例如下:
javac -d . HelloWorld.java
JRE
接下来是JRE,Java Runtime Environment,Java运行环境,既然是Java运行环境,就是说这是Java程序运行必备的环境,由于Java程序是在Java虚拟机上运行的,所以必然JRE是包含JVM的,我们看看JRE文件夹下有些什么,提供了很多bin和lib
bin中是很多应用程序,包括动态链接库以及window程序
除此之外JRE还包括了Java API
JVM
接下来我们来简单说说JVM,JVM包括:JVM解释器,指令系统,寄存器,栈,存储区,碎片回收区
JVM解释器:相当于CPU,处理字节码
指令系统:与计算机相似,一条指令由操作码和操作数两部分组成,操作码是8位二进制数,主要是说明一条指令的功能,操作数视情况而定
寄存器:作用是可以快速的与JVM的解释器进行数据交换,4个32位寄存器:PC程序计数器,optop寄存器操作数栈顶指针,frame寄存器指向当前执行环境指针和vars寄存器指向当前执行环境中第一局部变量的指针
栈:指令执行时数据和信息存储的场所和控制中心
存储区:存储编译后的字节码
关于Java虚拟机如果想深入了解,强烈建议阅读《深入理解Java虚拟机》这本书
CLASSPATH
这个变量很重要,但是很多时候我们都忽视它,尤其是在我们用eclipse等集成开发环境的时候,CLASSPATH环境变量是在编译Java源码和运行程序的时候用到的,它是Java程序所依赖的接口、类等的一个搜索路径,比如以下一个实例指定了是三个搜索路径,一个是当前路径,一个是一个特定的文件,一个是一个文件夹下的所有文件
.;c:jarlogj4.jar;d:workjava
另外多说一句,Java在编译和运行程序时不仅在CLASSPATH中去搜索,还会去找jre/lib/rt.jar文件,而且是比CLASSPATH更先找,这个在双亲委派模型中说道,是因为要去加载其中的最基础的一些类,具体可以去看深入理解Java虚拟机这本书的相关部分
另外再编译和运行时指定CLASSPATH的命令如下