JRE与JVM、JDK的区别

JRE与JVM、JDK的区别

一、      详细介绍

1、JVM -- java virtual machine

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

JVM 是 Java 平台的基础,和实际的机器一样,它也有自己的指令集,并且在运行 时操作不同的内存区域。 JVM 通过抽象操作系统和 CPU 结构,提供了一种与平台无关的代码执行方法,即与特殊的实现方 法、主机硬件、主机操作系统无关。但是在一些小的方面, JVM 的实现也是互不相同的,比如垃圾回收 算法,线程调度算法(可能不同 OS 有不同的实现)。

JVM 的主要工作是解释自己的指令集(即字节码)到 CPU 的指令集或 OS 的系统调用,保护用户免被恶意程序骚扰。 JVM 对上层的 Java 源文件是不关心的,它关注的只是由源文件生成的类文件( classfile )。类文件的 组成包括 JVM 指令集,符号表以及一些补助信息。

2、JRE -- java runtimeenvironment

       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 喊出的带有标志性的口号“ WriteOnce , RunAnywhere (一次编写,到处运行)”,正是建立在 JRE 的基础之上。何以实现?就是在 Java 应用程序和操作系统之间增加了一虚拟层—— JRE 。

程序源代码不是直 接编译、链接成机器代码,而是先转化到字节码(bytecode ) 这种特殊的中间形式,字节码再转换成机器码或系统调用。前者是传统的编译方法,生成的机器代码就不可避免地跟特殊的操作系统和特殊的机器结构相关。

而 Java 程序的字节码文件可以放到任意装有 JRE 的计算机运行,再由不同 JRE 的将它们转化成相应的机器代码,这就实现了 Java 程序的可移植性。这样程序员也不用去 关心程序运行的具体环境,而可以专心编写软件。这种分层抽象、隐藏细节的思想在计算机科学中处处可见,比如机器组织结构的设计、网络协议的实现等。 Pascal 语言的发明者 Niklaus Wirth ,就富有预见性地指出应该有这样一种可移植的语言,其生成的中间代码可以在一台假想的机器( ahypothetical 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下可能无法正常运行,而MicrosoftJVM只是Sun JVM的“低版本”,微软在windows xp/2003中干脆将JVM去掉了.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

JAVA字节码到底是怎么一回事,是什么时候生成的,起什么作用,和JVM的关系如何

字节码是在编译的时候生成的。它是与系统无关的。任何平台下只要有JVM就能运行字节码。

可以认为JVM将java程序翻译成了另一段文字。而不是想其他的语言一样直接编译成了机器码。

机器码可以直接运行,而字节码需要JVM的支持。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

jre;jdk; jvm的区别?

jdk是JAVA程序开发时用的开发工具包,其内部也有JRE运行环境JRE

JRE是JAVA程序运行时需要的运行环境,就是说如果你光是运行JAVA程序而不是去搞开发的话,只安装JRE就能运行已经存在的JAVA程序了。起内部都包含JAVA虚拟机JVM,JAVA虚拟机内部包含许多应用程序的类的解释器和类加载器等等

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

请详细说明JDK JRE JVM之间的关系

JDK是JAVA的核心,包括JRE(JAVA 虚拟环境)、编译器等,JDK的主流产品是由SUN公司开发的,JDK本身是用JAVA编写的,安装包的SRC.ZIP就是JDK的源码

JVM(JAVA虚拟机),是可以运行JAVA代码的假想计算机,主要任务是把JAVA字节码编译成特定计算机的机器指令,是JAVA实现“一次运行,处处运行”的关键

JRE是JAVA运行环境,包括JVM、JAVA平台核心类和支持文件,如果只是运行JAVA程序的话,可以下载JRE就可以了,如果要开发的话,就要下JDK了。

JAVA运行顺序,先编写JAVA程序块,然后通过JDK的编译器把JAVA程序编译成字节码生成class文件,然后通过JVM运行,主要指令有 javaca.java,java a

 

MFC,微软基础类(Microsoft FoundationClasses),提供一组通用的可重用的类库供开发人员使用,用于在C++环境下编写应用程序的一个框架和引擎,是一种Application Framework,一般与VC++绑定的

作为Application Framework,MFC的使用只能提高某些情况下的开发效率,只起到辅助作用,而不能替代整个Win32 程序设计。但是由于简单性,好多人认为VC++开发必须用MFC,其实这是不对的

VC++是个集成开发环境,不需要再下载别的软件

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

编译器 JVM JDK JRE JSE是什么 关系?都有什么用,都怎么样工作的

面向对象和面向过程有 什么 区别?对象又指什么?

Java里的类是否可以看作C语言的头文件?方法看作函数?

 “不推荐使用Netbeans, 现在公司里都用Eclipse”都是把程序做出来这个还有区别么?不同的开发工具开发出来的程序还有不同么???

我安装了NetBeans IDE是否还需要另外安装JVM JDKJRE JSE?

安装JDK似乎需要修改环境变量。这是为什么?

在JDK里面是不是包含了JVM JREJSE?

类库和库又有什么 区别么

JVM JDKJRE JSE的概念我知道的,我 想知道他们间有什么联系,工作的这个过程是怎样的

今天才学问题比较多~

 

java是面向对象编程,一切皆对象。这个观念要以后慢慢才能了解,无论怎么样讲都是初学者理解不了的。所以还需要多多练习。

C语言是面向过程编程的。所以没有“类”的概念,而java的类却更符合人类的思维方式,C语言更符合机器的思维方式。

 

还有就是,千万不要把C语言的一些概念和java混淆,这是两种不同类型的语言,java是纯的面向对像的编程语言,而C是面向过程的。以后的学习中你会发现java比C更有优势。再重申一下,最好不要把C的概念和java做对比。你把java当作一门新的语言来学。 唯一可以借鉴C的就是语法和编程的一些基本概念如数据类型,设计模式之类的。

 

jvm 是java虚拟机,将java的class字节码文件翻译成二进制可执行程序。

jdk 是java的开发包 java sdk, java的开发工具,包含SUN公司提供的java API,将java源码编译为class字节码文件,通常jdk中就包含了jre。

jre 是java运行时,用于执行java程序。

jse 是java标准开发,jse 就是java开发的一种,标准开发,例如开发桌面程序。

 

其余的还有 javaEE, javaMe 前者是java的企业应用,后者是java的嵌入式开发,例如java手机程序。

 

如果netbeans能运行,说明你安装的netbeans已经包含了JDK,而jdk里已经包含了jre和jvm,故以后就可以省心了,至于环境变量的事情,你可以去搜索一下,很简单的配置,有个好消息告诉你,如果你是按照安装向导操作的,向导会自动将环境变量写进去。

 

java基础类库就是API,而你说的“库”我不太明白是什么意思。

 

jdk是开发工具包,里面包含 javaSE,JRE, JVM

jdk 把.java文件编译成为.class字节码文件

然后JRE调用JVM将字节码文件翻译成可供机器执行的程序。就这样了啊。

 

 

最后说一句: 不推荐使用Netbeans, 现在公司里都用Eclipse,这才是趋势。

 

************************************8

继续补充

angelicdemon所说的没错,IDE环境会在配置文件里自己写上jdk和jre的路径以便找到他们。

但是经过安装向导安装jdk后确实会自动将java所需要的环境变量写进系统环境变量中。再有,如果使用IDE的话 环境变量没啥用处,只有用命令行模式编译java源码才会有用处。

 

另外: Eclipse绝对是现在公司的首选,因为公司里的项目用ECLIPSE构建的,源码上传到版本控制系统后,同步后,你用Netbeans打不开,还得重新构建,麻烦吗? 再说了NB和EC还是有相当大区别的。

还有就是,这句话最重要,如果你真的是java初学者,绝对不要用IDE,用记事本+命令行 这样才能真正掌握java的机理。 哈哈 累死我了,就写到这吧

 

 

 

 



 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值