基础知识:JVM JRE JDK

   

引言

   

我们如果要用Java编写程序的话就必须安装JDK,那么JDK是什么,另外安装JDK的同时,会提示用户需要安装JRE,一般这两个就像孪生兄弟一样,装了JDK之后,如果我们进入到安装路径下,会发现除了JDK外,还有一个文件夹JRE,那么什么又是JRE,最后都说Java是跨平台语言,因为它的代码是运行在一个叫做Java虚拟机上的,那么什么又是Java虚拟机呢,本文大致说明一下这三者的区别,关于Java虚拟机如果想深入了解,建议阅读《深入理解Java虚拟机》这本书,个人认为这本书写得很棒

   

说明

   

JDK

   

首先JDKJava Development Kit的缩写,也就是Java开发工具箱的意思,它包含了各种库和类,比如如下图所示,当然也包括了JRE

   

   

另外多说一句,经常用到的用来编译Java文件的javac命令就是在JDK中的,利用JDK中的javac.java文件编译成.class文件,然后再装入到Java虚拟机中,由Java运行环境执行,而运行java程序是由其中的java命令执行的

   

另外再多说一句,如果类指定了包名,那么编译的时候要加上-d选项,比如在当前目录下生成与包名相对应的目录层次的编译示例如下:

   

javac -d . HelloWorld.java

   

JRE

   

接下来是JREJava Runtime Environment,Java运行环境,既然是Java运行环境,就是说这是Java程序运行必备的环境,由于Java程序是在Java虚拟机上运行的,所以必然JRE是包含JVM的,我们看看JRE文件夹下有些什么,提供了很多bin和lib

   

   

bin中是很多应用程序,包括动态链接库以及window程序

   

   

除此之外JRE还包括了Java API

   

JVM

   

接下来我们来简单说说JVMJVM包括:JVM解释器,指令系统,寄存器,栈,存储区,碎片回收区

   

JVM解释器:相当于CPU,处理字节码

   

指令系统:与计算机相似,一条指令由操作码和操作数两部分组成,操作码是8位二进制数,主要是说明一条指令的功能,操作数视情况而定

   

寄存器:作用是可以快速的与JVM的解释器进行数据交换,432位寄存器:PC程序计数器,optop寄存器操作数栈顶指针,frame寄存器指向当前执行环境指针和vars寄存器指向当前执行环境中第一局部变量的指针

   

栈:指令执行时数据和信息存储的场所和控制中心

   

存储区:存储编译后的字节码

   

关于Java虚拟机如果想深入了解,强烈建议阅读《深入理解Java虚拟机》这本书

   

CLASSPATH

   

这个变量很重要,但是很多时候我们都忽视它,尤其是在我们用eclipse等集成开发环境的时候,CLASSPATH环境变量是在编译Java源码和运行程序的时候用到的,它是Java程序所依赖的接口、类等的一个搜索路径,比如以下一个实例指定了是三个搜索路径,一个是当前路径,一个是一个特定的文件,一个是一个文件夹下的所有文件

   

.;c:\jar\logj4.jar;d:\work\java

   

另外多说一句,Java在编译和运行程序时不仅在CLASSPATH中去搜索,还会去找jre/lib/rt.jar文件,而且是比CLASSPATH更先找,这个在双亲委派模型中说道,是因为要去加载其中的最基础的一些类,具体可以去看深入理解Java虚拟机这本书的相关部分

   

另外再编译和运行时指定CLASSPATH的命令如下

   

  

posted @ 2015-05-06 11:22  keedor  阅读(160)  评论(0编辑  收藏  举报