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

理解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
分享到:
评论

相关推荐

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

    理解JDK、JRE和JVM的区别和联系 了解JDK的主要组件和功能 掌握JRE的组成和使用方法 理解JVM在Java开发和执行中的重要性 阅读建议 在阅读本文之前,建议您具备以下基础知识: 了解Java编程语言的基本语法和特性 熟悉...

    jdk、jre、jvm的区别

    网上摘录总结的关于jdk、jre、jvm的区别

    Java中JDKJRE和JVM解析.doc

    Java中JDKJRE和JVM解析.doc

    一张图看懂JVM、JRE、JDK

    一张图看懂JVM、JRE、JDK

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

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

    jdk8下载快,十分好用,Java,jvm,jre

    jdk8下载快,十分好用,Java,jvm,jre

    详解Java中的JDK、JRE、JVM

    本文主要介绍了Java中的JDK、JRE、JVM的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧

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

    简单的说JDK是用于开发的而JRE是用于运行Java程序的。JDK和JRE都包含了JVM,从而使得我们可以运行Java程序。JVM是Java编程语言的核心并且具有平台独立性。

    JDK6.0+JRE.zip

    JDK全称Java SE Development kit(JDK),即java标准版开发包,是Oracle提供的一套用于开发java应用程序的开发包,它提供编译,运行java程序所需要的各种工具和资源,包括java编译器,java运行时环境,以及常用的java...

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

    jdk开发包请大家合理利用,绝对是正品jdk开发包请大家合理利用,绝对是正品jdk开发包请大家合理利用,绝对是正品jdk开发包请大家合理利用,绝对是正品

    JDK、JRE、JVM是什么?

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

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

    主要介绍了java环境中的JDK、JVM、JRE详细介绍的相关资料,对于初学者还是有必要了解下,细致说明他们是什么,需要的朋友可以参考下

    Java中JDK,JRE和JVM之间的关系

    初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧,JDK(Java Development Kit)简单理解是Java开发工具包,JRE(Java Runtime Enviroment)是Java的运行环境,JVM( java virtual machine)也...

    java8,jdk1.8,jre1.8

    JDK是 Java 语言的软件开发工具包,JDK(TM)8 64位简而言之就是一款...LDK的全称Java Development Kit,是Java语言的软件开发工具包,是整个java开发的核心,包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

    【Java基础】JDK、JRE、JVM之间的关系

    3.JDK、JRE、JVM的区别 3.1 Java为什么能跨平台,实现一次编写,多处运行? 1.编译器、调试器 JAVA编译器(javac.exe) JAVA编译器的作用是将(.java文件)编译成字节码文件,是最基本的开发工具。编译时首先读入java...

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

    JDK,JRE,JVM区别与联系.pdf 学习资料 复习资料 教学资源

    29.027.JAVA基础教程_Java语言概述-JDK、JRE、JVM的关系(29).rar

    29.027.JAVA基础教程_Java语言概述-JDK、JRE、JVM的关系(29).rar

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

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

    jdk+jre 1.8.0_144.rar windows64位

    java的开发工具集,顾名思义就是你做开发用的,其中来包括javac,也...所以jdk和jre的区别就度是一个用于开发,一个用于运行,联系就是他们都是java开发者所必备问的(除非你就像运行java程序,那么用jre就足够了)。

    JDK1.8_161_jre

    JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。 jdk1.8新特性 Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可。 新增lambda表达式 提供函数式...

Global site tag (gtag.js) - Google Analytics