jvmjrejdk三者的区别和联系

     2022-11-09     304

关键词:

一、 详细介绍
1、JVM -- java virtual machine
JVM就是我们常说的java虚拟机,它是整个java实现跨平台的 最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可 以在虚拟机上执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解 释给本地系统执行。
JVM 是 Java 平台的基础,和实际的机器一样,它也有自己的指令集,并且在运行 时操作不同的内存区域。 JVM 通过抽象操作系统和 CPU 结构,提供了一种与平台无关的代码执行方法,即与特殊的实现方 法、主机硬件、主机操作系统无关。但是在一些小的方面, JVM 的实现也是互不相同的,比如垃圾回收 算法,线程调度算法(可能不同 OS 有不同的实现)。 
JVM 的主要工作是解释自己的指令集(即字节码)到 CPU 的指令集或 OS 的系统调用,保护用户免被恶意程序骚扰。 JVM 对上层的 Java 源文件是不关心的,它关注的只是由源文件生成的类文件( class file )。类文件的 组成包括 JVM 指令集,符号表以及一些补助信息。
2、JRE -- java runtime environment
JRE是指java运行环境。光有JVM还不能成class的 执行,因为在解释class的时候JVM需要调用解释所需要的类库lib。 在JDK的安装目 录里你可以找到jre目录,里面有两个文件夹bin和lib,在 这里可以认为bin里的就是jvm,lib中则是jvm工 作所需要的类库,而jvm和 lib和起来就称为jre。所以,在你写完java程序编译成.class之后,你可以把这个.class文件 和jre一起打包发给朋友,这样你的朋友就 可以运行你写程序了。(jre里有运行.class的java.exe)
JRE 是 Sun 公司发布的一个更大的系统,它里面就有一个 JVM 。 JRE 就与具体的 CPU 结构和操作系统有关,我们从 Sun 下载 JRE 的时候就看到了不同的各种版本。同 JVM 一起组成 JRE 的还有一些 API (如 awt , swing 等)。 JRE 是运行 Java 程序必不可少的。
JRE ( Java Runtime Environment ),是运行 Java 程序必不可少的(除非用其他一些编译环境编译成.exe可执行文件……),JRE的 地位就象一台PC机一样,我们写好的Win32应用程序需要操作系统帮 我们运行,同样的,我们编写的Java程序也必须要JRE才能运行。
JRE里面有一个 JVM , JRE 与具体的 CPU 结构和操作系统有关,我们从 Sun 下载 JRE 的时候就看到了不同的各种版本,,同 JVM 一起组成 JRE 的还有 一些 API (如 awt , swing 等), JRE 是 运行 Java 程序必不可少的.
3、JDK -- java development kit
JDK是java开发工具包,基本上每个学java的人都会先在机器 上装一个JDK,那他都包含哪几部分呢?让我们看一下JDK的安装目录。在目录下面有 六个文件夹、一个src类库源码压缩包、和其他几个声明文件。其中,真正在运行java时起作用的 是以下四个文件夹:bin、include、lib、 jre。现在我们可以看出这样一个关系,JDK包含JRE,而JRE包 含JVM。
bin:最主要的是编译器(javac.exe)
include:java和JVM交互用的头文件
lib:类库
jre:java运行环境
(注意:这里的bin、lib文件夹和jre里的bin、lib是 不同的)总的来说JDK是用于java程序的开发,而jre则 是只能运行class而没有编译的功能。
eclipse、idea等 其他IDE有自己的编译器而不是用JDK bin目录中自带的,所以在安装时你会发现他们只要求你 选中jre路径就ok了。
二、 三者联系
Java 喊出的带有标志性的口号“ Write Once , Run Anywhere (一次编写,到处运行)”,正是建立在 JRE 的基础之上。何以实现?就是在 Java 应用程序和操作系统之间增加了一虚拟层—— JRE 。
程序源代码不是直 接编译、链接成机器代码,而是先转化到字节码( bytecode ) 这种特殊的中间形式,字节码再转换成机器码或系统调用。前者是传统的编译方法,生成的机器代码就不可避免地跟特殊的操作系统和特殊的机器结构相关。
而 Java 程序的字节码文件可以放到任意装有 JRE 的计算机运行,再由不同 JRE 的将它们转化成相应的机器代码,这就实现了 Java 程序的可移植性。这样程序员也不用去 关心程序运行的具体环境,而可以专心编写软件。这种分层抽象、隐藏细节的思想在计算机科学中处处可见,比如机器组织结构的设计、网络协议的实现等。 Pascal 语言的发明者 Niklaus Wirth ,就富有预见性地指出应该有这样一种可移植的语言,其生成的中间代码可以在一台假想的机器( a hypothetical machine )上运行。
而 Java 虚拟机( Java virtual machine 或 JVM )就是这样的一台机器,它模拟实际处理器的结构,解释字节码。 怎么一会说是 JRE ,一会儿又成了 JVM ,两者是否同物不同名? 回答是否定的。
JRE的地位就象一台PC机一样,我们写好的Win32应用程序需要操作系统帮 我们运行,同样的,我们编写的Java程序也必须要JRE才能运行。
要运行Applet,在客户端必须安装有 JRE,即“运行时”,容易一点理解,就象所谓的“插件”,要开发JAVA应用程序\Web应用,就必须在服务器端安装相应的 JVM+JDK 了(开发应用 Java web应用 时,客户端不需要安装任何的JVM)
如果你使用JAVA开发应用,就需要安装 JRE+JDK,就是 J2SE. 
如果在客户端运行Applet,客户端浏览器必须嵌有JAVA JVM,如果没有,就需要安装,即: 在客户端创建JRE(运行时,包含JVM),而客户端是不需要做开发的,所以,JDK就没有必要安装 了。

不同版本的Applet在不同的JVM下可能无法正常运行,而Microsoft JVM只是Sun JVM的“低版本”,微软在windows xp/2003中干脆将JVM去掉了.

offsetwidthclientwidthscrollwidth三者之间的区别和联系

scrollWidth:对象的实际内容的宽度,不包边线宽度,会随对象中内容超过可视区后而变大。 clientWidth:对象内容的可视区的宽度,不包滚动条等边线,会随对象显示大小的变化而改变。 offsetWidth:对象整体的实际宽度,包... 查看详情

事件获取目标currenttargettargetsrcelement三者之间的区别和联系

currentTarget 指的是触发事件的当前对象,可以是冒泡和捕获的对象,不一定是点击或者鼠标移入等事件的直接触发对象。可以是他的父元素等。target指的是事件触发的直接对象。IE有兼容问题。srcElement和target相同,firFox不兼... 查看详情

事件获取目标currenttargettargetsrcelement三者之间的区别和联系

currentTarget 指的是触发事件的当前对象,可以是冒泡和捕获的对象,不一定是点击或者鼠标移入等事件的直接触发对象。可以是他的父元素等。target指的是事件触发的直接对象。IE有兼容问题。srcElement和target相同,firFox不兼... 查看详情

ios开发uicolor,cgcolor,cicolor三者的区别和联系

  最近看了看CoreGraphics的东西,看到关于CGColor的东西,于是就想着顺便看看UIColor,CIColor,弄清楚它们之间的区别和联系。下面我们分别看看它们三个的概念:一、UIColor  UIColor是UIKit中存储颜色信息的一个重要的类,一个UI... 查看详情

si模型、sis模型、sir模型三者的联系与区别是啥?

...儿童一级到他的高级啊。 参考技术BS1模型ses模型ser模型三者的联系与区别有很大。 参考技术C这三者之间的模型区别是非常大的。 参考技术D这几种的联系和区别就是显示不一样,大概意思是差不多。 第5个回答 2020-03-25Emotion... 查看详情

java中jvmjrejdk三者之间的关系

目录一、JVM介绍二、JDK介绍三、JRE介绍四、三者关系介绍一、JVM介绍1JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域,负责执行指令、管理数据、内存、寄存器、包含在JDK中。二、JDK介绍1JDK的全称为(Java... 查看详情

arraylistlinkedlist和vector三者区别与联系

一.ArrayList特性:1.基于动态数组的数据结构,初始容量为10,容量不足时,在缺省的情况下自动增长原来的50%。2.非线程安全。3.允许Null元素。二.LinkedList特性:1.底层的数据结构是双链表。2.非线程安全。3.允... 查看详情

浅谈进程线程和协程三者之间的区别和联系

一、进程、线程、协程1,进程经典定义:一个执行中程序的实例。系统中的每个程序都运行在某个进程的上下文中。(-摘自CSAPP)进程是系统资源分配的最小单位 2,线程(thread)线程就是运行在进程上下文中的逻辑流。线... 查看详情

androidpackage属性packagename和applicationid三者的联系及区别(代码片段)

名词解释package属性:在AndroidManifest.xml文件中。packagename:模块结构的包名。ApplicationID:模块defaultConfig块下的applicationId属性。设置ApplicationID每个Android应用程序都有唯一一个类似Java包名的ApplicationID,比如com.exa 查看详情

初识java语言-stringstringbuilder和stringbuffer三者之间的区别和联系!!!建议收藏(代码片段)

当我们学习了Java中的继承和多态后,现在我们就可以来学习一个非常重要的东西:String字符串,以及还有StringBuilder和StringBuffer两兄弟。我们直接发车了!!!前期文章前言-IDEA如何配置?让你敲代码更... 查看详情

gitgithubgitlab三者之间的联系以及区别

在讲区别以及联系之前先简要的介绍一下,这三者都是什么(本篇文章适合刚入门的新手,大佬请出门左转)1.什么是Git?Git是一个版本控制系统。版本控制是一种用于记录一个或多个文件内容变化,方便我们查阅特定版本修订情况... 查看详情

jvmjdkjre三者的区别与联系

JVM、JDK、JRE三者的区别与联系JVM什么是JVM?JVM即java虚拟机,可以运行字节码文件,针对不同的操作系统JVM有不同的实现,以实现相同的字节码文件在不同的平台可以得到同一个结果。java程序运行步骤:.java文件ÿ... 查看详情

jvmjre和jdk三者间的区别和联系

...Java程序的最小环境。JVM(JavaVirtualM大专栏 JVM、JRE和JDK三者间的区别和联系echinal)JVM是JRE的一部分,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理... 查看详情

jdkjrejvm三者区别与联系

JDK、JRE、JVM三者区别与联系 JDK:JavaDevelpmentKitjava开发工具JRE:Java RuntimeEnvironmentJava运行时环境JVM:javaVirtualMachineJava虚拟机  查看详情

[转帖]spuskuid,它们都是什么意思,三者又有什么区别和联系呢?(代码片段)

SPU、SKU、ID,它们都是什么意思,三者又有什么区别和联系呢?http://blog.sina.com.cn/s/blog_5ff11b130102wx0p.html 电商时代,数据为王。所以电商人入门要懂的第一课,我们通常会培训基础理论,涉及到各种常用名词,UV、PV、GMV、CPC... 查看详情

能力与知识技能三者之间的区别与联系

作者:豆芽链接:https://www.zhihu.com/question/22475646/answer/28084200来源:知乎著作权归作者所有,转载请联系作者获得授权。知识、技能与才干组成了能力的三核,那么我们如何才能修炼成高手?三核中,知识最容易习得。往前追溯... 查看详情

jquery与javascript与ajax三者的区别与联系

简单总结:1、JS是一门前端语言。2、Ajax是一门技术,它提供了异步更新的机制,使用客户端与服务器间交换数据而非整个页面文档,实现页面的局部更新。3、jQuery是一个框架,它对JS进行了封装,使其更方便使用。jQuery使得JS... 查看详情

soa,esb和eai之间的联系和区别

    今天和大家聊聊有关企业EAI,ESB和SOA这三者之间的关系.当然因为全凭个人工作经验对着三者的理解如果有什不对的还请各位通路中人一块探讨.首先说实话个人感觉这三个概念(貌似说概念也不是特别准确)还是蛮... 查看详情