-----------android培训、java培训、java学习型技术博客、期待与您交流! ------------
一、原理机制
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,是java的核心和基础。它是一个在java编译器和os平台之间的虚构出来的处理器,是一种利用软件方法实现的抽象的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。编译虚拟机的指令集与编译微处理器的指令集非常类似。
二、JVM执行程序的过程
JVM执行程序的过程 :
1、加载class文件;
2、管理并分配内存;
3、执行垃圾收集;
虚拟机在任何平台上都提供给编译程序一个共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(ByteCode),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机是相同的。Java源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行。
Java虚拟机是一个抽象的计算机,和实际的计算机一样,它具有一个指令集并使用不同的存储区域。它负责执行指令,还要管理数据、内存和寄存器。Java解释器负责将字节代码翻译成特定机器的机器代码。
三、类装载器
1、装载:查找和导入Class文件
2、链接:
(a)检查:检查载入的class文件数据的正确性
(b)准备:给类的静态变量分配存储空间
(c)解析:将符号引用转成直接引用
其中解析步骤是可以选择的
3、初始化:对静态变量,静态代码块执行初始化工作
类装载工作由ClassLoder和其子类负责。
3、初始化:对静态变量,静态代码块执行初始化工作
类装载工作由ClassLoder和其子类负责。
JVM在运行时会产生三个ClassLoader:根装载器,ExtClassLoader(扩展类装载器)和AppClassLoader。
其中根装载器不是ClassLoader的子类,由C++编写,因此在java中看不到他,负责装载JRE的核心类库,如JRE目录下的rt.jar,charsets.jar等;ExtClassLoader是ClassLoder的子类,负责装载JRE扩展目录ext下的jar类包;
AppClassLoader负责装载classpath路径下的类包。
这三个类装载器存在父子层级关系,即根装载器是ExtClassLoader的父装载器,ExtClassLoader是AppClassLoader的父装载器。
默认情况下使用AppClassLoader装载应用程序的类。
Java程序运行流程图: