`
huangyongxing310
  • 浏览: 496306 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

JVM JRE JDK区别和联系

    博客分类:
  • Java
 
阅读更多
JVM JRE JDK区别和联系




JVM 调优就是调节内的大小和找出内存溢出的问题所在(mat工具),和内存的回收机制的选择


字节码文件经过解析器解析后才能执行,而这个解析器是属于JVM的一部分。


(1)JVM是Java 虚拟机
(2)JDK是Java开发包
(3)JRE是Java运行环境


其中三者的关系是包含的,JRE包含JVM,JDK包含JRE。
RE中已经有了Java虚拟机,JDK中也包含了Java运行环境。所以只要安装好了JDK之后,自然就弄好了JRE和JVM。

JVM规范:一个约束JVM实现的文档,它正式描述一个虚拟机最基本的实现要求。使用单一的JVM规范是为了确保不同JVM实现之间的互操作性。
JVM实现:一个符合JVM规范要求的的电脑程序。
JVM实例:一个JVM实现程序运行的进程。


JRE是一个包含运行一个Java程序所需要东东的软件包。它包括一个JVM实现和一个Java Class Library实现。
Java Class Library(JCL)是一个Java程序可在运行时调用的动态可加载库的集合。

JRE包括JVM、Java核心类库和支持文件。

JRE中由ClassLoader负责查找和加载程序引用到的类库,基础类库ClassLoader会到rt.jar中自动加载,其它的类库,ClassLoader在环境变量CLASSPATH指定的路径中搜索



Java 的类加载器的工作原理:
当执行 java ***.class 的时候, java.exe 会帮助我们找到 JRE ,接着找到位于 JRE 内部的 jvm.dll ,这才是真正的 Java 虚拟机器 , 最后加载动态库,激活 Java 虚拟机器。虚拟机器激活以后,会先做一些初始化的动作,比如说读取系统参数等。一旦初始化动作完成之后,就会产生第一个类加载器―― Bootstrap Loader , Bootstrap Loader 是由 C++ 所撰写而成,这个 Bootstrap Loader 所做的初始工作中,除了一些基本的初始化动作之外,最重要的就是加载 Launcher.java 之中的 ExtClassLoader ,并设定其 Parent 为 null ,代表其父加载器为 BootstrapLoader 。然后 Bootstrap Loader 再要求加载 Launcher.java 之中的 AppClassLoader ,并设定其 Parent 为之前产生的 ExtClassLoader 实体。这两个加载器都是以静态类的形式存在的。这里要请大家注意的是, Launcher$ExtClassLoader.class 与 Launcher$AppClassLoader.class 都是由 Bootstrap Loader 所加载,所以 Parent 和由哪个类加载器加载没有关系。


类装载工作由ClassLoader及其子类负责,ClassLoader是一个重要的Java执行时系统组件,它负责在运行时查找和装入Class字节码文件。JVM在运行时会产生三个ClassLoader:根装载器、ExtClassLoader(扩展类装载器)和AppClassLoader(系统类装载器)。其中,根装载器不是ClassLoader的子类,它使用C++编写,因此我们在Java中看不到它,根装载器负责装载JRE的核心类库,如JRE目标下的rt.jar、charsets.jar等。ExtClassLoader和AppClassLoader都是ClassLoader的子类。其中ExtClassLoader负责装载JRE目录ext中的JAR类包;AppClassLoader负责装载ClassPath路径下的类包。


//====================================
当执行 java ***.class 的时候

java.exe 会帮助我们找到 JRE ,接着找到位于 JRE 内部的 jvm.dll ,这才是真正的 Java 虚拟机器 , 最后加载动态库,激活 Java 虚拟机器。(虚拟机器实例建立起来了)

JVM在运行时会产生三个ClassLoader:根装载器(核心类库)、ExtClassLoader(扩展类装载器)和AppClassLoader(系统类装载器)。

加载完在后,JVM跳转到应用的main位置开始运行应用

遇到有一些类没有加载,就产中断或异常,JVM在中断或异常中进行类的加载,加裁完成后再跳回原来的位置继续运行

//====================================
JVM就是运行java字节码的虚拟机,包含类加载器、内存管理和代码运行等

JVM是不会自动跑起来的,这就要求有一个程序去初始化一个JVM实例出来,并跳转到JVM中去运行,这个程序就是JRE,用于创建一个JVM实例并运行应用,当然jre还包含了一些基础类库,这些库会在JVM开始运行应用前最先全部加载到内存中,因为这些类基本上都会用到的






https://blog.csdn.net/gfangxiong/article/details/7425563(JVM加载class文件的原理机制)
https://www.cnblogs.com/zhengbin/p/5631987.html(JVM——三个ClassLoader详解)


分享到:
评论

相关推荐

    jdk、jre、jvm的区别

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

    jdk与jre的区别

    下面我们将详细介绍 JDK 和 JRE 的概念、区别和关系。 JDK JDK 是 Java 语言的软件开发工具包,它包含了 Java 语言的编译器、调试器、文档生成器等开发工具。JDK 的主要组成部分包括: * Java 编译器(javac):...

    jdk和jre的区别

    ### JDK与JRE的区别 #### 一、概念解析 **JDK**(Java Development Kit):作为Java开发工具包,它是面向开发人员的核心组件。它不仅包含必要的运行环境(即JRE),还提供了完整的Java软件开发环境,包括编译器...

    一张图看懂JVM、JRE、JDK

    一张图看懂JVM、JRE、JDK

    JRE与JDK的区别

    Java开发和运行环境中,JRE(Java Runtime Environment)与JDK(Java Development Kit)是两个至关重要的组件。它们之间的主要区别在于用途和包含的内容。 JRE是Java运行环境,它是运行Java应用程序所必需的。它...

    jdk与jre的区别.

    3. **JVM、JRE和JDK的关系** - **JVM**(Java虚拟机)是JRE的核心部分,负责执行Java字节码。 - **JRE** 包含了JVM以及运行Java程序所需的基本类库和其他资源。 - **JDK** 包含了JRE的所有组件,并增加了用于...

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

    Java开发工具包(JDK)、Java运行环境(JRE)和Java虚拟机(JVM)是Java编程语言的三个核心组件,它们之间有着密切的关系和明确的分工。 JDK(Java Development Kit)是Java语言的软件开发工具包,它是整个Java开发...

    JDK和JRE文件的区别

    ### JDK与JRE的区别:深度解析 在深入探讨JDK(Java Development Kit)与JRE(Java Runtime Environment)之间...总之,JDK和JRE各自服务于不同的目的,了解它们的区别对于正确选择和使用Java开发和运行环境至关重要。

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

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

    linux jdk1.7 64位 jre jdk

    在安装和配置Linux上的JDK 1.7时,通常需要下载对应的二进制文件,然后解压到指定目录(如/usr/lib/jvm),设置环境变量JAVA_HOME、PATH和CLASSPATH。同时,为了确保系统能够正确识别并使用新安装的JDK,还需要更新...

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

    本文主要讲解JDK、JRE和JVM之间的区别。 一、JDK、JRE、JVM的关系 1. JDK(Java Development Kit):Java开发工具包,是Java开发人员必备的软件,包含了编译器(javac)、JRE、调试器、文档生成工具、打包工具等。...

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

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

    openjdk8u60+jvm jdk源码+jvm源码

    JDK 是开发和运行 Java 应用程序所需的一组工具和库的集合,包括 JRE(Java Runtime Environment)和开发工具。 JVM(Java Virtual Machine)是 JDK 的核心组成部分,它负责执行字节码,提供了一个“一次编写,到处...

    jdk和jre的区别1

    值得注意的是,JDK的JRE提供了两种不同类型的JVM,即client和server版本,分别用于优化轻量级应用和重量级应用的执行效率。 JRE,即Java Runtime Environment,是运行Java程序所必需的环境。它包含了JVM,这是一个...

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

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

    JDK、JRE、JVM是什么?

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

    Java中JDKJRE和JVM解析.doc

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

Global site tag (gtag.js) - Google Analytics