欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JVM、JRE、JDK的纠葛

程序员文章站 2022-05-21 07:54:47
...

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

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

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

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

        下面这张图就可以说明这三者的关系:JDK包含了JRE,而JRE中又包含了JVM。那我们就从简单到复杂一步一步分析:JVM——JRE——JDK。
        JVM、JRE、JDK的纠葛
            
    
    博客分类: About java JDKJREJVM新特性 

        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程序的使用者,而不是开发者。
         JVM、JRE、JDK的纠葛
            
    
    博客分类: About java JDKJREJVM新特性 JVM、JRE、JDK的纠葛
            
    
    博客分类: About java JDKJREJVM新特性 

        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的内嵌数据库。

        JVM、JRE、JDK的纠葛
            
    
    博客分类: About java JDKJREJVM新特性 

【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 注解

 

  • JVM、JRE、JDK的纠葛
            
    
    博客分类: About java JDKJREJVM新特性 
  • 大小: 133.9 KB
  • JVM、JRE、JDK的纠葛
            
    
    博客分类: About java JDKJREJVM新特性 
  • 大小: 2.1 KB
  • JVM、JRE、JDK的纠葛
            
    
    博客分类: About java JDKJREJVM新特性 
  • 大小: 2.7 KB
  • JVM、JRE、JDK的纠葛
            
    
    博客分类: About java JDKJREJVM新特性 
  • 大小: 4.3 KB