JVM -- JVMJDKJRE
Posted MinggeQingchun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM -- JVMJDKJRE相关的知识,希望对你有一定的参考价值。
一、JDK(Java Development Kit;Java开发工具包)
JDK(Java Development Kit)即 Java开发工具包,Java的核心
JDK是提供给Java开发人员使用的,JDK是Java程序开发者用来来编译、调试Java程序用的开发工具包,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了,除了包含JRE以外还包含了开发Java程序所必须的命令工具。其中的开发工具:编译工具(javac.exe) 打包工具(jar.exe)等
JDK的工具也是Java程序,也需要JRE才能运行。为了保持JDK的独立性和完整性,在JDK的安装过程中,JRE也是 安装的一部分。所以,在JDK的安装目录下有一个名为jre的目录,用于存放JRE文件
JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是JVM,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为JRE
二、JRE(Java Runtime Environment;Java运行时环境)
JRE(Java Runtime Environment)即Java运行时环境
HRE包括JVM和Java程序所需的核心类库等。核心类库主要是java.lang包:包含了运行Java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等,系统缺省加载这个包
如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器),只是针对于使用Java程序的用户
三、JVM(Java Virtual Machine;Java虚拟机)
JVM(Java Virtual Machine)即Java虚拟机
JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的
Java虚拟机,它是整个Java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行
.class文件由编译器编译程序得到的二进制文件(.class文件)。不同的编译器,可以编译出相同的字节码文件,字节码文件也可以在不同的JVM上运行(具有跨平台性,一次编译,到处运行)
.class文件并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。
只有JVM还不能构成.class文件的执行,因为在解释class的时候JVM需要调用解释所需要的类库lib,而JRE包含lib类库
JVM对于主流的操作系统都有相应的版本,目的就是将 统一的字节码 编译成对应操作系统识的二进制码,然后执行。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的(字节码),就可以在多种平台上不加修改地运行。从而实现
Write once,Run Anywhere!
从图中可以看到,有了JVM这个抽象层之后,Java就可以实现跨平台了。JVM只需要保证能够正确执行.class文件,就可以运行在诸如Linux、Windows、MacOS等平台上了
1、虚拟机
虚拟机(Virtual Machine)可以分为系统虚拟机和程序虚拟机:
(1)系统虚拟机:完全是对物理计算机的仿真,提供了一个可运行完整操作系统的软件平台,如Visual Box;
(2)程序虚拟机:专门为执行单个计算机程序而设计,其典型代表就是Java虚拟机(JVM),在Java虚拟机中执行的指令我们称为Java字节码指令
常见三种虚拟机:Oracle HotSpot、BEA JRockit、IBM J9
2、JVM特性
(1)自动内存管理
(2)自动垃圾回收机制(相比于C++)
(3)跨语言的平台,多语言混合编程
3、JVM类加载流程原理
4、JVM生命周期
Java实例对应一个独立运行的Java程序(进程级别)
1、启动
启动一个Java程序,一个JVM实例就产生。拥有public static void main(String[] args)函数的class可以作为JVM实例运行的起点。
2、运行
main()作为程序初始线程的起点,任何其他线程均可由该线程启动。JVM内部有两种线程:守护线程和非守护线程,main()属于非守护线程,守护线程通常由JVM使用,程序可以指定创建的线程为守护线程。
3、消亡
当程序中的所有非守护线程都终止时,JVM才退出;若安全管理器允许,程序也可以使用Runtime类或者System.exit()来退出。
JVM执行引擎实例则对应了属于用户运行程序线程它是线程级别的
四、JDK、JRE、JVM关系图
JDK1.8官网地址
https://docs.oracle.com/javase/8/docs/index.html
JDK1.6官网地址
三者的包含关系:
JDK = JRE + 开发工具集(例如Javac编译工具等)
JRE = JVM + Java SE标准类库
JVM是不能独立安装的;JRE和JDK都是可以独立安装的
有单独的JDK安装包,也有单独的JRE安装包,没有单独的JVM安装包
安装JDK的时候:JRE就自动安装了,同时JRE内部的JVM也就自动安装了
安装JRE的时候:JVM也就自动安装了
.java文件加载和执行流程如下
以上是关于JVM -- JVMJDKJRE的主要内容,如果未能解决你的问题,请参考以下文章