JDK

JDK:Java Development Kit 是Java的标准开发工具包(普通用户只需要安装 JRE来运行 Java 程序。而程序开发者必须安装JDK来编译、调试程序)。它提供了编译、运行Java程序所需的各种工具和资源,包括:Java编译器.Java运行环境JRE.常用的Java基础类库.

安装目录的说明

bin文件里面存放了JDK的各种开发工具的可执行文件,主要的是编译器(javac.exe)

db文件是一个先进的全事务处理的基于Java技术的数据库(jdk自带数据库db的使用)

include文件里面是Java和jvm交互用的头文件

jre为java运行环境

lib文件存放的是JDK工具命令的实际执行程序

JRE

JRE:Java runtime environment 是运行基于Java语言编写的程序所不可缺少的运行环境,用于解释执行Java的字节码文件。

也是通过它,Java的开发者才得以将自己开发的程序发布到用户手中,让用户使用。JRE中包含了Java virtual machine(JVM),runtime class libraries和Java application launcher,这些是运行Java程序的必要组件。与大家熟知的JDK不同,JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器),只是针对于使用Java程序的用户。

安装目录的说明

bin里的就是JVM,lib中则是JVM工作所需要的类库,而JVM和 lib和起来就称为JRE

JVM

Java Virtual Machine 是Java的虚拟机,是JRE的一部分。它是整个java实现跨平台的最核心的部分,负责解释执行字节码文件,是可运行java字节码文件的虚拟计算机。

所有平台的上的JVM向编译器提供相同的接口,而编译器只需要面向虚拟机,生成虚拟机能识别的代码,然后由虚拟机来解释执行。

JAVA跨平台的原因

使用Java编译器编译Java程序时,生成的是与平台无关的字节码,这些字节码只面向JVM。不同平台的JVM都是不同的,但它们都提供了相同的接口。

JVM是Java程序跨平台的最核心的部分,只要为不同平台实现了相应的虚拟机,编译后的Java字节码就可以在该平台上运行。其屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

正是因为有了JVM的存在,Java才实现了强大的跨平台特性。

JVM执行程序的过程

1、加载.class 文件

所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。只有JVM还不能成功执行.class的类文件,因为在解释class的时候JVM需要调用解释所需要的类库lib,而jre包含lib类库。

2、运行class文件

可以在命令行中输入 java 字节码文件名 ,此时启动了一个jvm,加载字节码文件名.class字节码文件到内存,然后jvm运行内存中的字节码指令

在IDE上就类似于点击运行按钮。

3、管理并分配内存

4、执行垃圾收集,调用垃圾收集器进行垃圾回收

三者的区别与联系

JDK用于开发,是给开发人员用的,JRE 用于运行java程序,和JVM是给普通用户使用的。如果只是运行Java程序,可以只安装JRE,无序安装JDK。也就是说:使用JDK开发完成的java程序,交给JRE去运行。

JDK包含了JRE,JDK 和 JRE 中都包含 JVM。也可以说JDK是JRE+Java的开发工具。JRE包含了JVM+Java语言的核心类库。

jre包括jvm和java核心类库_JDK、JRE、JVM分别是什么及它们之间的有什么关联相关推荐

  1. jre包括jvm和java核心类库_包含JVM标准实现及Java核心类库

    包含JVM标准实现及Java核心类库 点击次数:1533  更新日期:2013-03-24 "青花瓷Java版"为北京师范大学教育学部蔡苏作词原创,覆盖教育技术学院专业选修课< ...

  2. Java 核心类库一览

    作者:白色蜗牛 来源:蜗牛互联网 阅读本文你将收获: 类库与 JAR 文件 什么是类库 我们知道,在面向对象的程序设计里,一个类是可以调用另外一个类的方法,只要把被调用的那个类引入到 classpat ...

  3. Java学习笔记 - 4 Java核心类库

    4 Java 核心类库 4.1 泛型 泛型,即"参数化类型".就是将原来具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时 ...

  4. Java核心类库(下)

    文章目录 Java核心类库(下) 异常机制(重点) 基本概念 异常的分类 异常的避免 异常的捕获 异常的抛出 自定义异常 异常机制总结 File类(重点) 基本概念 常用的方法 IO流 IO流的概念 ...

  5. Java核心类库篇5——异常

    Java核心类库篇5--异常 java.lang.Throwable类是Java语言中错误(Error)和异常(Exception)的超类 其中Error类主要用于描述Java虚拟机无法解决的严重错误 ...

  6. Java核心类库篇1——简介

    Java核心类库篇1--简介 1.核心类库 包名 主要功能 java.applet 提供了创建applet需要的所有类 java.awt.* 提供了创建用户界面以及绘制和管理图形.图像的类 java. ...

  7. Java核心类库篇8——网络编程

    Java核心类库篇8--网络编程 1.七层网络模型 OSI(Open System Interconnect),即开放式系统互联,是ISO(国际标准化组织)组织在1985 年研究的网络互连模型. 当发 ...

  8. Java核心类库篇7——多线程

    Java核心类库篇7--多线程 1.程序.进程和线程 程序 - 数据结构 + 算法,主要指存放在硬盘上的可执行文件 进程 - 主要指运行在内存中的可执行文件 线程就是进程内部的程序流 操作系统内部支持 ...

  9. Java核心类库篇6——IO

    Java核心类库篇6--IO 1.File 1.1.构造方法 方法声明 功能介绍 public File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 ...

最新文章

  1. Error in ** : incorrect number of dimensions
  2. UIAlertController
  3. Android杂谈--ListView之BaseAdapter的使用二(转)
  4. 模板引擎--handlebars
  5. Prometheus — 软件架构
  6. [云炬创业基础笔记]第十章企业的利润计划测试6
  7. ICCV 2019 | COCO-GAN:通过条件坐标的部分图像生成
  8. bash: _upvars: `-a2‘: invalid number specifier bash: /dev/null: 权限不够 bas
  9. Python sys.stdout sys.stdin
  10. 图文详解cacti的安装和使用
  11. java 打印三维数组_Java基础第三天_数组
  12. 优先级反转实验,使用信号量实现【RT-Thread学习笔记 5】
  13. 大型网站高并发——服务器负载均衡设计
  14. 堆排序的Python实现
  15. Python利用SMTP发邮件
  16. firefly-rk3288开发板Linux驱动——W25Q32 SPI驱动
  17. 提交留言HTML模板代码
  18. mybatis插件助手的使用
  19. WiFi共享精灵,生活好伴侣
  20. 用C#(入门) 双色球摇奖机 随机数实现

热门文章

  1. QQ邮箱的一些bug
  2. 高数-不定积分-分部积分法
  3. 干货 | Linux面试题(2020最新版)
  4. RK3399教程:wifi驱动调试技巧
  5. 双向广搜-HDU1401 Solitaire
  6. 【转】珍藏多年的素材,灵感搜寻网站
  7. html图片颜色变深,利用CSS改变图片颜色的100种方法!
  8. UDS-下载示例解读
  9. Docker部署renren-fast人人开源后台项目
  10. 5G 空口信令分析指导书