JDK、JRE和JVM三者的关系

Java程序执行过程

JVM(java virtual machine)

注:由于各种操作系统(windows、linux等)支持的指令集(二进制可执行代码)不同,程序代码在不同的操作系统上应该编写的也就应该不同。而Java中的.class字节码文件是种特殊的二进制文件,JVM认得它,可以将它翻译成支持JVM的不同操作系统或硬件平台可执行的机器语言。

Java虚拟机,它是实现跨平台运行的核心部分。由它解释给操作系统执行,不同的操作系统,只需安装对应的java虚拟机,开发人员只需要遵循java规范,就可以在所有的操作系统上运行java程序。就好比一个中国人要演讲(java程序),它可以到世界各地去演讲(不同的操作系统),将写的演讲稿讲出来(编译器将.java文件编译成.class字节码文件),【这里假设世界各地的人要通过听的方式获益来对比操作系统里面要用机器指令】,在哪个地方就配那个地方的翻译(不同平台对应的JVM,JVM交给解释器),给当地人一句一句翻译演讲内容(一句一句解释),翻译一句当地人理解一句(解释一句,执行一句),就会获益(得到结果)。而不是演讲完了,翻译人全部翻译(不产生整个的机器代码程序),如果在翻译过程中,当地人能理解就一直翻译到结束,否则停止(如果解释过程不出现错误,就一直进行到完毕,否则将在错误处停止执行)。中国人至始至终都可以只使用汉语演讲就可以(一套java开发规范)。即一次编译,到处运行。但是,会比系统直接执行的要慢。通过翻译来听肯定没有直接听懂来的快。

程序员写的java程序代码(.java),会通过编译器编译成.class的字节码文件(二进制文件),JVM在为操作系统解释.class文件时需要调用类库lib,而lib类库在JRE中。

JRE(Java Runtime Environment)

Java程序运行环境,用户使用程序,需要这个运行环境。JRE中包含了JVM、JVM工作需要的核心类库和支持文件。但它不是开发环境,里面没有包含任何开发工具(如编译器和调试器)。

JDK(Java Development Kit)

JDK是Java开发工具包,是开发人员使用的,它包括JRE、Java开发工具(javac、java、jdb[调试]等)和Java基础的类库(即Java API),在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,bin里的就是jvm,lib中是jvm工作所需要的类库,而jvm和lib合起来就是jre。其中,JDK中两个主要组件:javac——编译器,将源程序转成字节码,java——运行编译后的java程序(.class后缀的)。

小结:用户运行程序需要运行环境,想要在什么操作系统上都能运行,需要JVM在中间解释,所以运行环境JRE里面包括了JVM以及JVM工作需要的类库,开发人员开发程序需要开发工具包,就需要(编译、执行、调试)工具、以及供开发调用的类库(Java API)以及运行环境,就组成了JDK。

JRE=JVM+JavaSE标准类库       JDK=JRE+开发工具集(例如Javac编译工具等)

有了JDK,就可以通过记事本等文本编辑器编写代码,以.java命名,通过命令行javac  xx.java来编译成字节码文件xx.class,再用java xx来执行。(xx指类名)。

为了方便开发人员开发调试,一些公司开发了Java IDE(Java集成开发工具),如:开源的Eclipse、MyEclipse、NetBeans、IntelliJ IDEA等。

Java基础笔记(一)——JDK、JRE、JVM的更多相关文章

  1. Java开发介绍之JDK JRE JVM 和 环境变量配置

    一.JDK>JRE>JVM JDK(Java Development Kit):Java开发工具包 JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和 ...

  2. java的概念了解(jdk,jre,jvm,javase,javaee,javame)

    jvm jvm:java virtual machine,俗称:java虚拟机,只认识xxx.class这类文件 jre jre:java runtime environment,俗称java运行环境 ...

  3. 《疯狂Java讲义》(三) ---- JDK&JRE&JVM&CLASSPATH

    JDK: Java SE Development Kit, Java标准版开发包.包括Java编译器,JRE,以及常用的Java类库等. JRE: Java Runtime Environment,运 ...

  4. 9.Java三大版本以及JDK,JRE,JVM简单介绍

    Write Once,Run Anywhere. JavaSE:标准版(桌面程序,控制台开发...),是Java的基础和核心. JavaME:嵌入式开发(手机,小家电...),现在基本不用已经过时. ...

  5. 细分java环境中的JDK、JVM、JRE

    细分java环境中的JDK.JVM.JRE 近来小看了下Android,扑面而来一堆概念JDK.JVM.JRE.SDK.NDK.ADT.缕了一下,其中JDK.JVM.JRE是java环境的东西,而SD ...

  6. 1、Java语言概述与开发环境——JDK JRE JVM理解

    一.理解概念: 1.JDK(Java Development Kit Java开发工具包) JDK是提供给Java开发人员使用的,其中包含Java的开发工具,也包括JRE,所以安装了JDK,就不用单独 ...

  7. Java的特性和优势以及不同版本的分类,jdk,jre,jvm的联系与区别,javadoc的生成

    Java 1.Java的特性和优势 Write Once,Run Anywhere 简单性 面向对象 可移植性 高性能 分布式 动态性 多线程 安全性 健壮性 2.Java的三大版本 JavaSE:标 ...

  8. JDK,JRE,JVM区别与联系(ZZ)

    http://www.cnblogs.com/hencehong/p/3252166.html 我们开发的实际情况是:我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JD ...

  9. JDK,JRE,JVM区别与联系-理解与概括

    我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析 ...

  10. JDK,JRE,JVM区别与联系

    JDK : Java Development ToolKit(Java开发工具包).JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工 ...

随机推荐

  1. 让LoadRunner再次走下神坛

    1.        LoadRunner 阻碍了性能测试人员对通信过程的理解我希望做性能测试的人能忘掉这个工具.我们都知道VuGen有录制的功能,其实录制这个功能对于测试来说是个非常不好的选择,就是跟 ...

  2. matlab的一个疑问?

    把逻辑值放入一个已知矩阵,为啥结果是:真就取矩阵的值,假就不取值? K>> aaaa=randi(10,10,2) aaaa = 6 3 10 4 6 7 5 2 6 3 8 2 1 2 ...

  3. kvm初体验之二:安装

    Host: CentOS release 6.4 (Final) 1. 开启处理器的虚拟化功能 进入BIOS,使能虚拟化功能: 进入linux, grep -E "vmx|svm" ...

  4. codeforces 706D D. Vasiliy's Multiset(trie树)

    题目链接: D. Vasiliy's Multiset time limit per test 4 seconds memory limit per test 256 megabytes input ...

  5. kettle脚本定时任务不执行

    问题描述:在centos机器上部署了kettle脚本,每天定时跑一次,但是并没有成功跑,手动执行命令是可以的.而且写了一个测试的shell脚本也是可以执行的. 解决方案: 将2的错误输出,/usr/l ...

  6. linux命令学习笔记(26):用SecureCRT来上传和下载文件

    用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem. ...

  7. Git Shell Warning

    Warning: Permanently added 'github.com,192.30.252.120' <RSA> to the list of known hosts. The a ...

  8. UNR #1 火车管理

    很简单 用一个线段树维护 1.答案 2.当前栈顶是什么时候push进来的 然后用一棵以时间为版本的可持久化线段树维护每个操作之后第一个覆盖到他的操作是哪个 就可以了 询问直接在线段树上询问,修改在两棵 ...

  9. 【Lintcode】105.Copy List with Random Pointer

    题目: A linked list is given such that each node contains an additional random pointer which could poi ...

  10. WCF的用户名+密码认证方式(转)

    概述 今天在做Master Data Service(后面简称MDS)项目时需要通过WCF来使用MDS的API,从而对MDS的数据进行操作.在这个过程中,遇到了一个棘手的问题,就是在客户端调用Web ...