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去掉了.
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简介
JDK是(Java Development Kit)
的缩写,是Java的开发工具包.JDK
是提供给Java开发人员使用的,包含了java的开发工具
,也包括了JRE
所有的开发,调试和建视应用程序的工具。所以安装了JDK,就不用在单独安装JRE了。
JDK的一些重要组件:
apt
注解处理工具,后面会学到javadoc
文档生成器,可以自动从源代码生成说明文档jar 归档器
,将相关的类库打包到一个JAR
文件中。还可以帮助管理JAR
文件jConsole Java
监控和管理平台jhat
Java堆分析工具jstack
打印Java线程的堆栈信息keytool
策略创建和管理工具jarsigner
Java签名和验证工具
Java_JVM简介
JVM(JAVA虚拟机)
是运行Java字节码
的虚拟机,通过编译.java文件为.class文件
得到字节码文件 ,.class文件包含JVM可以理解的字节码
。JVM是一种规范
,JVM
提供可以执行Java字节码
的运行时环境,是可运行java字节码文件
的虚拟计算机- 最受欢迎的
JVM
的实现是Hotspot
,Oracle
拥有并维护的 JVM之所以称为虚拟机
,是因为JVM
提供了一个不依赖于底层操作系统和机器硬件体系结构的机器接口。- 所有平台的上的
JVM向编译器提供相同的接口
,而编译器只需要面向虚拟机,生成虚拟机能识别的代码,然后由虚拟机来解释执行。
JVM结构
Java_JVM中Class Loader(类加载器)
- 类装载器是用于加载类文件的一个子系统,其主要功能有三个
loading(加载),linking(链接),initialization(初始化)。
1.Loading
- 加载类,
JVM
有三种类加载方式:Bootstrap,extension,application
- 当加载类文件时,JVM会找到某个任意类
XYZ.class
的依赖项。 - 第一个引导类载入器试图查找类,它会扫描
lib文件夹下的rt.jar文件
- 如果没有找到类,则
extension类加载器会在jre\\lib\\ext
文件夹下查找该类 - 同样没有找到类,
application类加载器会在系统CLASSPATH
环境变量中查询所有的Jar文件和类. - 如果类被任何加载器发现,则被类加载器载入,否则抛出异常:
ClassNotFoundException。
2.Linking
- 类加载完成后,执行
Linking(链接)
,一个字节码验证器将验证生成的字节码是否正确,如果验证失败,得到一个验证错误。此时,还将内存分配给类中的静态变量和静态方法。
3.Initialization
- 这是类加载的 最后一个阶段,所有的静态变量都被赋以原始初值,并执行静态代码块。
Java_JVM中的 Memory Areas
JVM
内存区域被划分为很多部分来存储应用程序数据的特定部分
Method Area
(方法区):存储元数据,常量运行池,类代码,方法代码等结构Heap
(堆区):存储程序运行时所创建的所有对象Stack
(栈区):存储本地变量(局部变量)和中间结果,所有的这些变量都是创建他们的线程的本地变量
。每个线程有自己的Java Stack
,在线程创建时该区被创建,所有这些本地变量也被称为:线程本地变量
PC register
(程序计数器): 存储当前正在执行的的语句的物理内存地址。在Java中,每一个线程又有自己独立的PC register
。
Java_JVM Execution Engine(执行引擎)
- 所有分配给
JVM
的代码都由Execution Engine(执行引擎)
执行,执行引擎读取字节码并逐个执行。它使用两个内置的解释器和JIT编译器将字节码转换成机器码并执行它。
使用JVM
,两个解释器和编译器都会产生本地代码,不同之处在于他们如何生成本地代码,如何优化以及优化的代价。
Java_Interpreter(解释器)
- 通过查找预定义的
JVM-指令
到机器指令映射,JVM解释器
可以将每个字节码指令转换为相应的本地指令。 Java解释器
直接执行字节码,不执行任何优化。
Java_JIT Compiler(即时编译器)
JIT Compiler即使编译器
在运行时与JVM
交互并将字节码序列
编译为本地机器代码
。JIT Compiler执行一段代码(不是每次一条语句)
后,优化这块代码,并将其翻译为优化的机器代码。
JIT Compiler
是默认开启的,可以禁用,这种情况下,将解释整个Java程序,所以不建议禁用JIT Compiler
,当然除了诊断或者出现JIT编译问题
Java_JRE简介
JRE
是Java
运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器),只是针对于使用Java程序的用户
。- 通过JRE,Java的开发者才得以将自己开发的程序发布到用户手中,让用户使用。
- JRE包括
Java虚拟机(JVM Java Virtual Machine)
和Java程序所需的核心类等,
- 如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可
JRE可以作为JDK的一部分下载或者也可以单独下载
JRE依赖于平台
,这意味着根据机器类型(操作系统和体系结构),必须选择要导入和安装的JRE包
Java_JRE的组件
DDL文件
:由Java
客户端虚拟机使用.代码库,属性设置,资源文件
也都包含在JRE
内,比如rt.jar和charsets.jar
Java扩展文件
,如localedata.jar
JRE
包含用于安全管理的文件,包括安全策略(security policy)
和安全属性(security properties)
JRE
包含applets支持类的jar
文件JRE
包含平台使用的TrueType
字体文件
以上是关于java中eclipse,jdk,jvm,jre,编译器的区别?的主要内容,如果未能解决你的问题,请参考以下文章
JAVA Eclipse 启动 Eclipse 弹出“Failed to load the JNI shared library jvm_dll”怎么办