`
ShXin
  • 浏览: 13035 次
  • 性别: Icon_minigender_2
  • 来自: 天津
社区版块
存档分类
最新评论

JVM、JRE、JDK的纠葛

阅读更多

        Java编程以来,一直都没有了解过编程背后的机制。以下三个名词,每次听到都感觉很熟悉,但又缺少了对它们真正的了解。

JDK(Java Development Kit)            ——java开发工具包

JRE(Java Runtime Environment)    ——java运行环境

JVM(Java Virtual Mechine)             ——java虚拟机

        下面这张图就可以说明这三者的关系:JDK包含了JRE,而JRE中又包含了JVM。那我们就从简单到复杂一步一步分析:JVM——JRE——JDK。
       

        JVM,顾名思义,可以理解为一个虚拟出来的计算机。它具备计算机的基本运算方式,并且有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。正如大家所知,Java语言最重要的特点就是跨平台运行,也正因为以上原因,JVM成为了java实现跨平台的核心部分,那么,JVM是如何实现跨平台的呢?它主要负责将java程序生成的字节码文件(.class)解释成具体系统平台上的机器指令,让具体平台如window运行这些Java程序,也就是说,class文件并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行,这样就实现了跨平台。简而言之,使用JVM就是为了支持与操作系统无关的程序运行,实现跨平台。

        JRE,即java的运行环境,只有JVM而没有JRE是不可以运行java程序的。打开JRE的目录会看到如下左图内容:在bin目录下的server目录中(下右图)可以找到JVM(jvm.dll即java虚拟机),而lib文件夹下则是JVM工作所需要的类库。JVM在解析class文件时,需要调用类库lib才可以工作,而这两者,刚好构成了JRE。所以说,JRE是java的运行环境,安装了JRE就可以运行java程序了。换句话说,JRE只能用于运行,它面向的是java程序的使用者,而不是开发者。
        

        JDk,又称J2SDK(Java2 Software Development Kit),是java开发工具包,如上文所说,它包括了JRE,此外,它还包括一些java工具(编译器javac.exe、打包工具jar.ext、调试器jdb.exe、工具类库tools.jar等)和java标准类库(Java APT、基础类库rt.jar等)。下图是JDK目录下的文件:src是类库源码压缩包,还有一些声明文件,而运行java程序时起作用的其实是bin(存放编译器和工具,几个常用工具介绍如下) include(用于编译本地方法的文件)、jre(java运行环境的文件)、lib(存放类库文件)这四个文件夹,而db是java的内嵌数据库。

       

【bin目录下的几个常用工具】:

Javac:Java编译器,将Java源代码转换成字节码。
Java:Java解释器,直接从类文件执行Java应用程序字节代码。
appletviewer:小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。
Javadoc:根据Java源码及说明语句生成HTML文档。
Jdb:Java调试器,可以逐行执行程序,设置断点和检查变量。
Javah:产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。
Javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。

 

        以上就是JVM、JRE、JDK三者的主要介绍,细心者不难发现,在JRE和JDK中都包含了bin和lib这两个目录,那它们又有什么区别呢?简单地说,JDK中的是用于java程序开发的,而JRE 中的只能运行class而没有编译的功能。

        而对于它们的关系也有一个比较清晰的认识了,这里总结一下:JVM是将字节码文件转换成具体系统平台的机器指令;JRE即JVM+Java核心类库;JDK则是JRE+Java开发工具。那我们平时开发java程序的步骤也就清晰了:首先利用JDK开发出自己的java程序,通过JDK中的编译工具(javac)将这些源文件(.java)编译成字节码文件(.class),在JRE上运行这些字节码文件,JVM解析了这些字节码文件后,映射到相应的操作系统的系统调用。这样就完成了java程序的执行。

 

【附录】:

        JDK发展以来经历了很多版本的改进,而其升级后的新特性也是我们所需要了解的,以下是JDK1.5到JDK1.8的一些新特性。具体讲解请读者自行查找。

【JDK1.5】

1.自动装箱与拆箱:装箱时只需将值赋给一个类型包装器引用,java就会自动创建一个对象;拆箱时只

   需将该对象值赋给一个基本类型即可。
2.枚举:把集合里的对象元素一个一个提取出来,使代码更具可读性,理解清晰,易于维护。
3.静态导入:static方法可以直接调用,而不需要用类名调用。
4.可变参数:参数列表的参数个数可变。
5.内省:对于类的某个属性,可自动添加getter和setter方法。
6.泛型:在编译时刻进行类型检查,避免类型强制转换可能引起的运行错误。
7.For-Each循环:又称增强型for循环,简化了集合的遍历。

【JDK1.6】

1.Desktop类和SystemTray类
2.使用JAXB2来实现对象与XML之间的映射
3.理解StAX
4.使用Compiler API
5.轻量级Http Server API
6.插入式注解处理API(Pluggable Annotation Processing API)
7.用Console开发控制台程序
8.对脚本语言的支持如: ruby, groovy, javascript.
9.Common Annotations

【JDK1.7】

1.对Java集合(Collections)的增强支持
2.在Switch中可用String
3.数值可加下划线
4.支持二进制文字
5.简化了可变参数方法的调用

【JDK1.8】

1.接口的默认方法
2.Lambda 表达式
3.函数式接口
4.方法与构造函数引用
5.Lambda 作用域
6.访问局部变量
7.访问对象字段与静态变量
8.访问接口的默认方法
9.Date API
10.Annotation 注解

 

  • 大小: 133.9 KB
  • 大小: 2.1 KB
  • 大小: 2.7 KB
  • 大小: 4.3 KB
分享到:
评论

相关推荐

    一张图看懂JVM、JRE、JDK

    一张图看懂JVM、JRE、JDK

    jdk、jre、jvm的区别

    ### JDK、JRE与JVM的区别详解 #### 一、引言 在深入探讨JDK、JRE与JVM之间的区别之前,我们首先需要明确这三个概念的基本定义及其各自的作用。对于初学者而言,理解这些核心组件是学习Java编程的基础。 #### 二、...

    linux jdk1.7 64位 jre jdk

    在安装和配置Linux上的JDK 1.7时,通常需要下载对应的二进制文件,然后解压到指定目录(如/usr/lib/jvm),设置环境变量JAVA_HOME、PATH和CLASSPATH。同时,为了确保系统能够正确识别并使用新安装的JDK,还需要更新...

    openjdk8u60+jvm jdk源码+jvm源码

    JDK 是开发和运行 Java 应用程序所需的一组工具和库的集合,包括 JRE(Java Runtime Environment)和开发工具。 JVM(Java Virtual Machine)是 JDK 的核心组成部分,它负责执行字节码,提供了一个“一次编写,到处...

    jdk开发包,里面包含jre和jvm的详细资源

    首先,JDK包含了Java运行环境(Java Runtime Environment,JRE),它是执行Java程序所必需的基础。JRE包括Java虚拟机(Java Virtual Machine,JVM)、Java核心类库以及相关的系统配置文件。JVM是Java平台的核心,它...

    JRE与JDK的区别

    Java开发和运行环境中,JRE(Java Runtime Environment)与JDK(Java Development Kit)是两个至关重要的组件。它们之间的主要区别在于用途和包含的内容。 JRE是Java运行环境,它是运行Java应用程序所必需的。它...

    JDK、JRE、JVM是什么?

    JDK(java Development Kit):java 的开发和运行环境,包括java 的开发工具和 jre,在程序员的电脑上当然要安装JDK; JRE(Java Runtime Environment):它是Java运行环境,包括,java 运行的所需的类库+JVM(java ...

    详解Java中的JDK、JRE、JVM

    Java开发中的JDK、JRE和JVM是三个至关重要的概念,它们构成了Java应用程序的运行基础。理解这三个术语以及它们之间的关系是每个Java开发者必备的知识。 JDK(Java Development Kit)是Java开发工具包,它是Java开发...

    jdk与jre的区别

    JDK 与 JRE 的区别 JDK(Java Development Kit)和 JRE(Java Runtime Environment)是 Java 语言的两个核心组件,它们之间存在着一定的关系和区别。下面我们将详细介绍 JDK 和 JRE 的概念、区别和关系。 JDK JDK...

    大数据必学Java基础(九):JDK,JRE,JVM的区别

    本文主要讲解JDK、JRE和JVM之间的区别。 一、JDK、JRE、JVM的关系 1. JDK(Java Development Kit):Java开发工具包,是Java开发人员必备的软件,包含了编译器(javac)、JRE、调试器、文档生成工具、打包工具等。...

    简单谈谈JVM、JRE和JDK的区别与联系

    Java开发工具包(JDK)、Java运行环境(JRE)和Java虚拟机(JVM)是Java编程语言的三个核心组件,它们之间有着密切的关系和明确的分工。 JDK(Java Development Kit)是Java语言的软件开发工具包,它是整个Java开发...

    jdk1.8.0_171的jre裁剪版本

    Java开发工具包(Java Development Kit,简称JDK)是Java编程语言的核心组件,它包含了Java运行环境(Java Runtime Environment,JRE)、Java编译器、Java文档和Java各种类库等。`jdk1.8.0_171` 是JDK的一个具体版本...

    Java:jdk1.8.0_25(少个jre)

    JRE是Java应用程序运行的环境,通常由Java虚拟机(JVM)、Java基础类库和相关组件组成。如果要在没有安装JDK的机器上运行Java程序,需要单独下载JRE。 在下载并解压"jdk1.8.0_25"压缩包后,用户需要配置环境变量,...

    JDK JRE与JVM1

    Java 技术体系的核心组成部分包括 JDK (Java Development Kit),JRE (Java Runtime Environment) 和 JVM (Java Virtual Machine)。理解这三个概念对于Java开发者至关重要。 首先,JDK是Java开发工具包,它是Java...

    jdk1.8.0_191.zip

    比直接在官网下载来的快,jdk1.8版本,通常大家都在用,JDK是java development kit(java开发工具包)的缩写。每个学java的人都会先在机器上装一个JDK,那 ...现在我们可以看出这样一个关系,JDK包含JRE,而JRE包含JVM。

    AIX JDK1.8 JRE1.8 32位

    标题中的"AIX JDK1.8 JRE1.8 32位"指的是IBM的Java开发工具包(JDK)和Java运行环境(JRE)的32位版本,这两个组件都是针对AIX操作系统设计的。AIX,全称Advanced Interactive eXecutive,是IBM推出的一种基于UNIX的...

    java环境中的JDK、JVM、JRE详细介绍

    Java开发工具包(JDK)是Java编程的核心组件,提供了编写、编译和运行Java程序所需的一切工具。...理解JDK、JVM和JRE之间的关系对于Java开发者来说至关重要,因为它们构成了Java开发和运行的基础框架。

    jdk与jre的区别.

    3. **JVM、JRE和JDK的关系** - **JVM**(Java虚拟机)是JRE的核心部分,负责执行Java字节码。 - **JRE** 包含了JVM以及运行Java程序所需的基本类库和其他资源。 - **JDK** 包含了JRE的所有组件,并增加了用于...

    jdk-1.8-linux(2)

    **标题:“jdk-1.8-linux(2)”** 指的是Java Development Kit(JDK)的1.8版本在Linux操作系统上的安装包。这里的"2"可能表示这是该版本的第二个部分,因为描述中提到包被分成了四份。 **描述** 提到这个文件主要是...

Global site tag (gtag.js) - Google Analytics