要想开发Java程序,就需要知道什么是JVM、JRE以及JDK。JVM是运行Java程序的核心,JRE是支持Java程序运行的环境,而JDK是Java开发的核心,下面我们分别具体介绍它们以及它们之间的关系。

1.JVM(Java Virtual Machine,Java虚拟机)

Java虚拟机简称JVM,是一个抽象的计算机,和实际的计算机一样,它具有指令集并使用不同的存储区域(内存中不同的区域),JVM也就是Java程序的解释器。不同平台上的JVM也是不同的,但是它们都提供了相同的接口,JVM是Java程序跨平台特性的关键元素,只要为不同平台实现了相应的JVM,编译后的Java字节码就可以在该平台上运行。显然,相同的字节码文件想要直接在不同的平台上运行是不可能的(因为不同的平台有不同的指令集),只有通过中间的转换器(解释器)才可以实现,JVM就是这个转换器,在不同平台上的JVM将同一份字节码文件转换为不同平台上相应的机器指令。

Sun(Oracle)公司制定的Java虚拟机规范在技术上规定了JVM的统一标准,及具体定义了JVM中的指令集、寄存器、类文件的格式、栈、垃圾回收堆和存储区。Sun公司制定的这些规范的目的就是为了提供统一的标准,最终实现Java程序的平台无关性。

2.JRE(Java Runtime Environment,Java运行时环境)

Java运行时环境简称JRE,是运行Java应用程序所必须的环境的集合,其中包含了JVM虚拟机实现以及Java核心类库支持文件。Java核心类库是jre\lib\rt.jar这个文件。包括了Jave SE平台的所有类库。类库中主要的包如下:

●  java.lang:这个是系统的基础类,比如Object、String等类都是这里面的,这个包是唯一一个不需要引入(import)就可以使用的包。

●  java.io:这里面是所有输入输出有关的类,比如文件操作等。

●  java.nio:为了完善io包中的功能,提高io包中性能而编写的一个新包(但不是为了替代io包)。

●  java.net:这里面是与网络有关的类,比如URL、socket等。

●  java.util:这个是系统工具类,其中包括了主要的集合如Collection、List和Map等。

●  java.sql:这个是数据库操作的类,其中包括Connection、Statement等类。

如果仅仅需要运行Java程序,那么计算机中只需要安装JRE即可。

3.JDK(Java Development Kit,Java开发工具包)

顾名思义,JDK就是用来开发Java应用程序的软件包,JDK中包含了JRE以及JVM实现。JDK是Sun公司为了方便开发Java程序而提供的,JDK中提供了常用的编程所需要的工具库,因此Java开发者必须安装JDK,在JDK的基础上才能进行Java程序的开发。JDK中包含的一些常用的基本组件介绍如下:

●  javac:编译器,将Java源代码转换成字节码文件。

●  java:运行编译后的字节码文件(解释器)。

●  jar:打包工具,将相关的类文件打包成一个.jar文件。

●  javadoc:文档生成器,从源码中的文档注释提取文档。

我们最后来总结一下JVM、JRE和JDK之间的关系,JDK中包含JRE,JRE中包含JVM,如图所示:

图JVM、JRE和JDK关系图

IT兄弟连 Java语法教程 Java开发环境 JVM、JRE、JDK的更多相关文章

  1. IT兄弟连 Java语法教程 Java开发环境 安装JDK

    因为我们要开发Java程序,所以必须在我们的计算机中安装Sun(Oracle)公司提供给我们的JDK.目前最新版本的JDK是JDK 10,但是我们以学习JDK 8为主,所以我们要安装的版本是JDK 8 ...

  2. IT兄弟连 Java语法教程 Java开发环境 配置Java环境变量

    在安装完JDK后,我们需要配置系统的环境变量,否则在控制台中使用JDK为我们提供的工具时将出现如图12所示的错误信息. 图12  未配置环境变量时执行java命令提示的错误信息 当出现这样的提示信息时 ...

  3. IT兄弟连 Java语法教程 Java语言的其他特性

    Java语言中除了非常重要的跨平台特性外,还有如下几个关键特性: ●  语法简单易学 Java语言的语法简单明了,容易掌握,而且是纯面向对象(OOP)的语言,Java语言的简单性主要体现在以下几个方面 ...

  4. IT兄弟连 Java语法教程 Java语言入门 典面试题

    1.请说明JVM.JRE和JDK是什么?它们有什么关系? JVM是Java虚拟机,Java Virtual Machine的缩写,是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实 ...

  5. IT兄弟连 Java语法教程 Java平台的版本划分

    自从Sun公司推出Java以来,就力图使之无所不能.Java发展至今,按应用范围划分为3个版本,即Java SE.Java EE和Java ME,也就是SunOne(Open Net Environm ...

  6. Java(二)——开发环境搭建 安装JDK和配置环境变量

    1.安装JDK 下载地址  http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下载 ...

  7. IT兄弟连 Java语法教程 Java的发展历程

    只有少数几种编程语言对程序设计带来过根本性的影响.其中,Java的影响由于迅速和广泛而格外突出.可以毫不夸张的说,1995年Sun公司发布的Java1.0给计算机程序设计领域带来了一场变革.这场变革迅 ...

  8. IT兄弟连 Java语法教程 Java语言背景

    驱使计算机语言革新的因素有两个:程序设计技术的改进和计算环境的改变.Java也不例外.在大量继承C和C++的基础之上,Java还增加了反应当前程序设计技术状态的功能与精华.针对在线环境的蓬勃发展(In ...

  9. IT兄弟连 Java语法教程 Java语言的跨平台特性

    什么是平台 Java是可以跨平台的编程语言,那么首先我们需要知道什么是平台,通常我们把CPU与操作系统的整体称为平台. CPU大家都知道,是计算机的大脑,它既负责思维运算,又负责计算机中各种零部件的命 ...

随机推荐

  1. [2017-11-21]Abp系列——T4应用:权限树定义

    本系列目录:Abp介绍和经验分享-目录 今天介绍下,如何使用T4根据json文件自动生成权限定义. 先看成果 成果是: 要新增一个权限定义时,打开Json文件,找到目标节点,加个权限定义: 生成下Co ...

  2. 安装wampserver 计算机丢失msvcr100.dll

    刚刚重新安装了Windows 7 64位系统,再安装Wampserver 2时却提示系统错误,如下图所示: 在网上下载了MSVCR100.dll放到system32文件夹下依然没有用. 百度搜索了一下 ...

  3. git 生成patch和应用patch【转】

    本文转载自:http://www.jianshu.com/p/814fb6606734 1.在git源码目录下执行 1.1.两个commit间的修改(包含两个commit) git format-pa ...

  4. java中判断字符串是否相等有两种方法:

    1.用“==”运算符,该运算符表示指向字符串的引用是否相同,比如: String a="abc";String b="abc",那么a==b将返回true.这是 ...

  5. ultraedit激活

    使用期满的解决办法:https://blog.csdn.net/dfh00l/article/details/52093630 下载:https://blog.csdn.net/qq_16093323 ...

  6. chrome浏览器常用快捷键

    chrome浏览器常用快捷键 一.总结 一句话总结: Ctrl + j:打开“下载内容”页 Ctrl + t:打开新的标签页,并跳转到该标签页 Ctrl + d:将当前网页保存为书签 1.在新标签页中 ...

  7. 分享知识-快乐自己:Java 中 的String,StringBuilder,StringBuffer三者的区别

    这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面. 1):首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer &g ...

  8. 分享知识-快乐自己:IDEA 导入(web)项目并部署到 Tomcat

    IDEA 导入 (WEB)项目并部署到 Tomcat 1):导入 Web 项目 2):首先更改 JDK 环境  右键项目: 第一步:点击 Modules  第二步:点击 Libraries 第三步:点 ...

  9. python基础-正则1

    什么是正则表达式? 正则表达式是一种小型的\高度专业化的变成语言,主要用于字符串处理 正则表达式是一种通用语言,在python中通过re模块实现,import re 工具:在线正则表达式测试 http ...

  10. 剑指OFFER18 判断一个二叉树的子树

    public class a18_IsSubTree { public static boolean hasSubTree(TreeNode treeRoot1, TreeNode treeRoot2 ...