java中eclipse,jdk,jvm,jre,编译器的区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中eclipse,jdk,jvm,jre,编译器的区别?相关的知识,希望对你有一定的参考价值。

java中eclipse,jdk,jvm,jre,编译器的区别?

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

    JVM 是 Java 平台的基础,和实际的机器一样,它也有自己的指令集,并且在运行 时操作不同的内存区域。 JVM 通过抽象操作系统和 CPU 结构,提供了一种与平台无关的代码执行方法,即与特殊的实现方 法、主机硬件、主机操作系统无关。但是在一些小的方面, JVM 的实现也是互不相同的,比如垃圾回收 算法,线程调度算法(可能不同 OS 有不同的实现)。JVM 的主要工作是解释自己的指令集(即字节码)到 CPU 的指令集或 OS 的系统调用,保护用户免被恶意程序骚扰。 JVM 对上层的 Java 源文件是不关心的,它关注的只是由源文件生成的类文件( class file )。类文件的 组成包括 JVM 指令集,符号表以及一些补助信息。



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 程序必不可少的.

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去掉了.

参考技术A Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。最初主要用来Java语言开发,通过安装不同的插件Eclipse可以支持不同的计算机语言,比如C++和Python等开发工具。Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。

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了。

JVM就是常说的java虚拟机,它是整个java实现跨平台的 最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。
JVM 是 Java 平台的基础,和实际的机器一样,它也有自己的指令集,并且在运行 时操作不同的内存区域。 JVM 通过抽象操作系统和 CPU 结构,提供了一种与平台无关的代码执行方法,即与特殊的实现方 法、主机硬件、主机操作系统无关。但是在一些小的方面, JVM 的实现也是互不相同的,比如垃圾回收 算法,线程调度算法(可能不同 OS 有不同的实现)。
JVM 的主要工作是解释自己的指令集(即字节码)到 CPU 的指令集或 OS 的系统调用,保护用户免被恶意程序骚扰。 JVM 对上层的 Java 源文件是不关心的,它关注的只是由源文件生成的类文件( class file )。类文件的 组成包括 JVM 指令集,符号表以及一些补助信息。

JRE是指java运行环境。光有JVM还不能成class的执行,因为在解释class的时候JVM需要调用解释所需要的类库lib。 在JDK的安装目录里可以找到jre目录,里面有两个文件夹bin和lib,在 这里可以认为bin里的就是jvm,lib中则是jvm工 作所需要的类库,而jvm和 lib和起来就称为jre。
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 程序必不可少的。
参考技术B eclipse是java写代码的工具,jvm是运行(.class二进制文件)的工具。jvm存在于jre里面。jdk是代码转换成.class二进制文件的API,总的来说就是:使用写好的代码经过jdk转成.class文件,然后通过jre里面的jvm运行追问

是不是jdk包含了jre?怎么eclipse也有一个jre,?什么是编译器?

追答

eclipse里面的jre其实是你本地的jre以插件的形式加载到项目环境里面,表示你使用当前jre来运行.class文件,在本地计算机里面可以装多个jdk。编译器就是jre里面那个javac命令,jre是存在于jdk里面的

本回答被提问者采纳
参考技术C 要编译的话 有jre Eclipse就能正常工作了。jre可以负责编译和执行java的class文件 参考技术D eclipse是辅助编写代码的工具.
jdk是java的开发工具
jvm是java运行时的虚拟机
jre是java运行环境.追问

哪个是编译器?

Java_JDK,JVM,JRE

Java_JDK简介

  1. JDK是(Java Development Kit)的缩写,是Java的开发工具包.
  2. JDK是提供给Java开发人员使用的,包含了java的开发工具,也包括了JRE所有的开发,调试和建视应用程序的工具。所以安装了JDK,就不用在单独安装JRE了。

JDK的一些重要组件:

  1. apt注解处理工具,后面会学到
  2. javadoc文档生成器,可以自动从源代码生成说明文档
  3. jar 归档器,将相关的类库打包到一个JAR文件中。还可以帮助管理JAR文件
  4. jConsole Java监控和管理平台
  5. jhat Java堆分析工具
  6. jstack 打印Java线程的堆栈信息
  7. keytool 策略创建和管理工具
  8. jarsigner Java签名和验证工具

Java_JVM简介

  1. JVM(JAVA虚拟机)是运行Java字节码的虚拟机,通过编译.java文件为.class文件得到字节码文件 ,.class文件包含JVM可以理解的字节码
  2. JVM是一种规范JVM提供可以执行Java字节码的运行时环境,是可运行java字节码文件的虚拟计算机
  3. 最受欢迎的JVM的实现是Hotspot,Oracle拥有并维护的
  4. JVM之所以称为虚拟机,是因为JVM提供了一个不依赖于底层操作系统和机器硬件体系结构的机器接口。
  5. 所有平台的上的JVM向编译器提供相同的接口,而编译器只需要面向虚拟机,生成虚拟机能识别的代码,然后由虚拟机来解释执行。

JVM结构

Java_JVM中Class Loader(类加载器)

  1. 类装载器是用于加载类文件的一个子系统,其主要功能有三个loading(加载),linking(链接),initialization(初始化)。

1.Loading

  1. 加载类,JVM有三种类加载方式:Bootstrap,extension,application
  2. 当加载类文件时,JVM会找到某个任意类XYZ.class的依赖项。
  3. 第一个引导类载入器试图查找类,它会扫描lib文件夹下的rt.jar文件
  4. 如果没有找到类,则extension类加载器会在jre\\lib\\ext文件夹下查找该类
  5. 同样没有找到类,application类加载器会在系统CLASSPATH环境变量中查询所有的Jar文件和类.
  6. 如果类被任何加载器发现,则被类加载器载入,否则抛出异常:ClassNotFoundException。

2.Linking

  1. 类加载完成后,执行Linking(链接),一个字节码验证器将验证生成的字节码是否正确,如果验证失败,得到一个验证错误。此时,还将内存分配给类中的静态变量和静态方法。

3.Initialization

  1. 这是类加载的 最后一个阶段,所有的静态变量都被赋以原始初值,并执行静态代码块。

Java_JVM中的 Memory Areas

JVM内存区域被划分为很多部分来存储应用程序数据的特定部分

  1. Method Area(方法区):存储元数据,常量运行池,类代码,方法代码等结构
  2. Heap(堆区):存储程序运行时所创建的所有对象
  3. Stack(栈区):存储本地变量(局部变量)和中间结果,所有的这些变量都是创建他们的线程的本地变量。每个线程有自己的Java Stack,在线程创建时该区被创建,所有这些本地变量也被称为:线程本地变量
  4. PC register(程序计数器): 存储当前正在执行的的语句的物理内存地址。在Java中,每一个线程又有自己独立的PC register

Java_JVM Execution Engine(执行引擎)

  1. 所有分配给JVM的代码都由Execution Engine(执行引擎)执行,执行引擎读取字节码并逐个执行。它使用两个内置的解释器和JIT编译器将字节码转换成机器码并执行它。


使用JVM,两个解释器和编译器都会产生本地代码,不同之处在于他们如何生成本地代码,如何优化以及优化的代价。

Java_Interpreter(解释器)

  1. 通过查找预定义的JVM-指令到机器指令映射,JVM解释器可以将每个字节码指令转换为相应的本地指令。
  2. Java解释器直接执行字节码,不执行任何优化。

Java_JIT Compiler(即时编译器)

  1. JIT Compiler即使编译器在运行时与JVM交互并将字节码序列编译为本地机器代码
  2. JIT Compiler执行一段代码(不是每次一条语句)后,优化这块代码,并将其翻译为优化的机器代码。
  3. JIT Compiler是默认开启的,可以禁用,这种情况下,将解释整个Java程序,所以不建议禁用JIT Compiler,当然除了诊断或者出现JIT编译问题

Java_JRE简介

  1. JREJava运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器),只是针对于使用Java程序的用户
  2. 通过JRE,Java的开发者才得以将自己开发的程序发布到用户手中,让用户使用。
  3. JRE包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类等,
  4. 如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可
  5. JRE可以作为JDK的一部分下载或者也可以单独下载
  6. JRE依赖于平台,这意味着根据机器类型(操作系统和体系结构),必须选择要导入和安装的JRE包

Java_JRE的组件

  1. DDL文件:由Java客户端虚拟机使用.
  2. 代码库,属性设置,资源文件也都包含在JRE内,比如rt.jar和charsets.jar
  3. Java扩展文件,如localedata.jar
  4. JRE包含用于安全管理的文件,包括安全策略(security policy)安全属性(security properties)
  5. JRE包含applets支持类的jar文件
  6. JRE包含平台使用的TrueType字体文件

以上是关于java中eclipse,jdk,jvm,jre,编译器的区别?的主要内容,如果未能解决你的问题,请参考以下文章

jdk和Eclipse是啥关系啊

eclipse指定启动时的jdk(xjl456852原创)

Java_JDK,JVM,JRE

JAVA Eclipse 启动 Eclipse 弹出“Failed to load the JNI shared library jvm_dll”怎么办

JRE,JDK,JVM的区别

Java自学手册基础:Java中JDK JRE JVM之间的关系