`
qindongliang1922
  • 浏览: 2181037 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117401
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:125817
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:59810
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71227
社区版块
存档分类
最新评论

理解Java里面的jvm,jre,jdk的区别和联系

    博客分类:
  • JAVA
阅读更多
有时候越是基础的问题,越是容易被我们忽视,比如标题上的问题,感觉挺简单,但真正让解释一下,未必能够说的很清楚,其实这个问题在Oracle官网的Java的文档里面解释的非常清晰,看官网下面的一张图:






先解释下几个名词的意思:

(一)JVM(Java Virtual Machine ):Java虚拟机

主要负责将class文件也就是bytecode编码解释为机器能够识别的010101类似的编码,然后执行程序。因为JVM在主流平台都有对应实现,所以我们经常说JVM是跨平台的,只需要一次编写,便可以到处运行,其实这里面都是JVM屏蔽了底层操作系统的细节。

(二)JRE(Java Runtime Environment ):Java运行时环境


jre包含了jvm,此外还有一些java内置的Libraries,如集合类,并发类,数学函数等


(三)JDK(Java Development Kit ):Java开发工具包

jdk包含了jre,额外还提供了java源码编译和调试的功能等等,因此JDK是我们每个Java开发者必安装的一个组件。




从上图能够看出:

jdk包含jre,而jre又包含jvm,如果只需要运行java程序,其实只安装一个jre即可,如果还要开发和调试那就必须安装JDK了。




接下来思考一个问题我们写的java源码文件是如何被执行的?

看下面的一个图:






主要经历了下面的四个流程:

(1)先由开发人员编写出程序也就是我们的源码文件

(2)由JDK将其编译为class文件,注意这个文件是字节码,人眼不可读的

(3)由JRE里面的类加载器(Class Loader)负责把字节码文件加载,然后校验,准备,解析。注意加载这块是可以从网络上读取class文件,也可以从本地磁盘里读取。


(4)最后由JVM负责把字节码解释成机器识别的01010码,然后初始化程序并负责执行




在整个过程中Java里面出现了编译和解释的操作,所以可以理解Java是一门编译和解释性语言。在上面的整个流程中,有一个步骤,比较关键,就是类加载器这步。


关于Java里面的类加载器的工作模式,我们可以看下面的一个图:





Java里面的类加载器采用了双亲委派的模式,从上图可以看出,当加载一个class的文件名时,首先会从第一级的引导加载器开始寻找,如果没有就返回到第二级的扩展类加载器里面寻找这个class文件,如果再没有,就从我们应用加载器也就是系统依赖的包里面寻找,如果找到就行后面的步骤,如果仍然没有找到,就会抛出ClassNotFoundException异常,日常开发中常见的另外一个种异常是ClassNotDefFoundException,这种异常是加载a.class时,引用了b.class这时候如果b.class找不到就会这个异常,了解这些细节,对我们开发和调试就会有比较大的帮助。



总结:


本篇主要介绍了Java里面几个比较重要的概念,分别是JVM,JRE,JDK以及他们的工作流程,此外还着重了提了下类加载器的工作原理,理解他们的工作模式,有助于我们更好的使用Java语言,当然关于JVM的具体运行时的内存数据结构和垃圾回收机制本篇并没有细说,这个后面有空可以在总结下。



参考链接:

https://docs.oracle.com/javase/8/docs/index.html

http://www.careerbless.com/java/basics/JavaArchitecture.php

有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。 技术债不能欠,健康债更不能欠, 求道之路,与君同行。
  • 大小: 66.4 KB
  • 大小: 26.1 KB
  • 大小: 255.6 KB
0
0
分享到:
评论

相关推荐

    jdk、jre、jvm的区别

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

    Java中JDKJRE和JVM解析.doc

    Java开发中的JDK、JRE和JVM是三个至关重要的组件,它们构成了Java技术栈的基础。理解它们的区别和关系对于任何Java开发者来说都是至关重要的。 首先,Java开发工具包(JDK)是Java编程的核心组件,它包含了开发Java...

    jdk与jre的区别

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

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

    Java开发工具包(Java Development Kit,简称JDK)是Java编程语言的核心组件,它为开发者提供了编译、调试和运行Java应用程序所需的所有工具。在给定的压缩包中,我们有"jdk1.8.0_05",这是一个特定版本的JDK,发布...

    一张图看懂JVM、JRE、JDK

    一张图看懂JVM、JRE、JDK

    java,jdk1.8,jre1.8

    在给定的压缩包文件中,包含的是JDK(Java Development Kit)和JRE(Java Runtime Environment)的1.8版本,具体为jdk1.8.0_181和jre1.8.0_181。 JDK是Java编程的基础,它提供了编写、编译、调试和运行Java应用程序...

    java jdk jre8

    Java JDK与JRE是Java开发和运行环境中的两个核心组件,它们在软件开发和应用程序执行中扮演着至关重要的角色。本文将深入探讨这两个组件的概念、功能以及它们之间的关系。 Java Development Kit (JDK) 是Oracle公司...

    jdk和jre的区别

    ### JDK与JRE的区别 #### 一、概念解析 **JDK**(Java Development Kit):作为Java开发工具包,它是面向开发人员的核心组件。它不仅包含必要的运行环境(即JRE...理解它们的区别有助于更高效地进行Java开发和部署。

    详解Java中的JDK、JRE、JVM

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

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

    Java是大数据技术的基础,因此了解Java的底层结构对于学习大数据至关重要。本文主要讲解JDK、JRE和JVM之间...理解这三个组件的关系对于深入学习Java和大数据技术至关重要,因为它们构成了Java应用程序生命周期的基础。

    官网下载java JDK或JRE的历史版本说明

    1. **JRE(Java Runtime Environment)**:它包含了Java虚拟机(JVM)、Java类库和其他支持文件,是运行Java程序所必需的环境。 2. **JDK(Java Development Kit)**:不仅包含JRE中的所有组件,还额外提供了编译、...

    java 全版本的jdk和jre 解压版 64位

    ### Java JDK 和 JRE 的区别 - **JDK**:包含了JRE的所有内容,同时还包括编译工具、调试工具等。 - **JRE**:只包含运行Java程序所必需的部分,没有开发工具。 ### Java 1.6、1.7 和 1.8 版本的特点 #### Java ...

    java1.8版本,jre,jfx

    Java 1.8,通常被称为Java 8,是Java平台标准版(Java SE)的一部分,它包含Java Development Kit (JDK) 和Java Runtime Environment (JRE)。 JDK是Java程序员的主要工具集,它提供了编译器、调试器、文档生成器...

    Java零基础 - JDK JRE JVM三者关系.md

    在Java编程的世界里,JDK(Java Development Kit)、JRE(Java Runtime Environment)和JVM(Java Virtual Machine)这三个核心概念是不可或缺的基础知识。无论是对于初学者还是资深开发者而言,深入理解这三者之间...

    JDK,JRE,JVM区别与联系.pdf

    Java开发中的JDK、JRE和JVM是三个至关重要的概念,它们构成了Java技术的基础框架。下面将详细阐述这三个术语的区别与联系。 首先,JDK(Java Development Kit)是Java开发工具包,它是整个Java开发的核心。JDK包含...

    【Java面试题】JDK、JRE与JVM的区别

    【Java面试题】JDK、JRE与JVM的区别

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

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

Global site tag (gtag.js) - Google Analytics