Java学了有两年了,要让详细说说JRE、JDK、JVM,确实不能脱口而出。下面在别人博客的基础上,总结一下。

JVM(Java Virtual Machine 即Java虚拟机)


  它是整个Java实现跨平台的核心部分。所有的Java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。

  也可以理解为是一个虚拟出来的计算机,具备着计算机的基本运算方式,它主要负责将Java程序生成的字节码文件解释成具体系统平台上的机器指令。让具体的平台如Windows/Linux运行这些Java程序。

JRE(Java Runtime Environment 即Java运行环境)


  光有JVM还不能执行class文件,因为在解释class的时候JVM需要调用解释所需要的类库lib。在JDK的安装目录里可以看到jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是JVM,lib中则是jvm工作所需要的类库,而jvm和lib和起来就称为jre。所以,在写完Java程序编译成.class之后,可以把.class文件和jre一起打包发给别人,这样别人就可以运行你的程序了。如果想要运行一个开发好的Java程序,只需要给计算机安装JRE即可。

JDK(Java Development Kit 即Java开发工具包)


  在jdk的安装目录下有6个文件夹、一个src类库源码压缩包和其他几个声明文件。其中,真正在运行java文件时起到作用的是一下四个文件夹:bin、include、lib、jre。JDK包含JRE,而JRE包含JVM。bin:最主要的是javac(编译器);include:java和JVM交互用的头文件;lib:类库;jre:java运行环境;

  总的来说,JDK用于Java程序的开发,而JRE是运行class文件的运行环境不具备编译Java文件的功能。JDK提供Java开发人员使用,其中主要包含了Java的开发工具,其次也包括JRE。所以安装了JDK也就有了JRE。

三者的关系


JVM:将字节码文件转换成具体系统平台的机器指令。

JRE:JVM+Java语言的核心类库。

JDK:JRE+Java开发工具包。

  在实际开发的过程中:我们利用JDK(调用Java API)开发了属于我们自己的Java程序后,通过JDK中的编译程序(javac)将我们的java文件编译为java字节码文件(.class文件),然后在JRE上运行这些Java字节码文件,最后JVM解析这些字节码,映射到CPU指令集或OS的系统调用。

JRE、JDK和JVM之间的关系的更多相关文章

  1. jre、jdk、jvm之间的关系

    很多Java的程序员在写了很多代码之后,你问他JRE和JDK是是什么关系,JVM又是什么东西,他是不知道的. JVM(Java Virtual Machine) Java 虚拟机.它只认识 xxx.c ...

  2. JDK、JRE、JVM之间的关系

       JDK.JRE.JVM之间的关系 1.JDK下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads ...

  3. JDK、JRE与JVM之间的关系

    初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧: JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Env ...

  4. 弄懂 JRE、JDK、JVM 之间的区别与联系

    其实很多 Java 程序员在写了很多代码后,你问他 jre 和 jdk 之间有什么关系,jvm 又是什么东西,很多人不知所云.本篇不会讲述 jvm 底层是如何与不同的系统进行交互的,而主要理清楚三者之 ...

  5. java学习之Java中JDK,JRE和JVM之间的关系(转载)

    最近要重新抓一下java,大量扫技术文档,保存下来供自己查阅.以下转载自http://www.cnblogs.com/xiaofeixiang/p/4085159.html 初学JAVA很容易被其中的 ...

  6. Java中JDK,JRE和JVM之间的关系

    初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧,JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Envi ...

  7. Java中JDK,JRE和JVM之间的关系-(转载)

    初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧,JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Envi ...

  8. JDK,JRE,JVM之间的关系

    JDK包括JRE包括JVM http://java-mzd.iteye.com/blog/838514

  9. JDK、JRE、JVM之间的关系及JDK安装

    JRE (Java Runtime Environment) :是Java程序的运行时环境,包含 JVM 和运行时所需要的 核心类库 .JDK (Java Development Kit):是Java ...

随机推荐

  1. 8天学通MongoDB——第三天 细说高级操作

    原文地址:http://www.cnblogs.com/huangxincheng/archive/2012/02/21/2361205.html 今天跟大家分享一下mongodb中比较好玩的知识,主 ...

  2. linux 系统优化

  3. jsp中如何用jstl实现if(){}else if(){}else{}

    <c:choose> <c:when test="${条件}"> 情况1........... </c:when> <c:when tes ...

  4. QT 读取文件夹下所有文件(超级简单的方法,不需要QDirIterator)

    之前,用标准C++写过读取文件夹.现在用QT重写代码,顺便看了下QT如何实现,还是相当简单的.主要用到QDir,详细文档可见这里 A program that lists all the files ...

  5. [iOS]ARC和MRC下混编

    1.在MRC工程中使用ARC的文件(例如AFNetworking,SDWebImage,MJRefresh等)在Build Phases里找到对应.m 在后面添加-fobjc-arc(代表这个文件使用 ...

  6. IOS系统中使用zepto的live事件绑定不了的一个办法

    IOS系统中使用zepto的live事件绑定不了的一个办法: 对事件对象添加样式:cursor:pointer

  7. Excel有用的宏

    =Index({"同事","同学","亲戚"},b3) 前面的array默认索引从1开始. 如果b3为1.而枚举数组是: 0=>同事, ...

  8. requirejs 优化压缩

    1 配置node环境 2 配置built.js文档 3 执行命令node r.js -o built.js 文件目录: <!DOCTYPE HTML> <html lang=&quo ...

  9. extern的意思

    还是在重温C++,看到extern的意思,觉得很有必要记下来. extern是用来干什么的大家想必都是很明白的. 如果有个全局变量,或者其他文件的全局变量,要在本文件或函数中使用,可以通过extern ...

  10. oracle数据库sql的基本使用

    整理了下关于oracle数据库中SQL的基本使用语句,整理如下,方便记忆. oracle的基本术语 数据字典,数据库元数据信息的数据字典表和用户可以读取的数据字典视图组成.存放oracle数据库所用的 ...