zoukankan      html  css  js  c++  java
  • 基础知识: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:jarlogj4.jar;d:workjava

       

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

       

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

       

      

  • 相关阅读:
    全新 D 系列虚拟机型号
    D 系列性能预期
    Azure Backup 入门
    对 Azure Backup 的常见配置问题进行故障排除
    宣布发布长期保留 Azure Backup功能
    宣布 Azure Backup 支持备份 Windows Server 2008
    Azure Backup 简介
    MongoDB中ObjectId的误区,以及引起的一系列问题
    UNIX/Linux_C_程序员需要掌握的七种武器
    Docker企业版安装指南
  • 原文地址:https://www.cnblogs.com/keedor/p/4481352.html
Copyright © 2011-2022 走看看