JAVA详解JVM工作原理和流程
说起JAVA,人们首先想到的是,java是一门编程语言,然而事实上java是一种技术,它由四部分组成:1.java编程语言、2.java类文件格式、3.java虚拟机、4.java应用程序接口。他们关系如下图所示:
运行期环境代表着JAVA平台,开发人员编写java代码(.java文件),然后再将其编译成字节码文件(.class),再然后字节码被装入内存,一旦字节码进入虚拟机,就会被解释器解释执行,或者是被即时代码发生器,准换成机器代码执行。java平台由java虚拟机与java应用程序接口搭建,java语言则是进入这个平台的通道,用JAVA语言编写并编译的程序可以运行在这个平台上,这个平台结构如下图所示:
应用程序和小应用程序 | |||
Java基本API | Java标准扩展API | ||
Java基础类 | Java标准扩展类 | ||
Java虚拟机 | |||
移植接口 | |||
适配器 | 适配器 | 适配器 | 适配器 |
浏览器 | 操作系统 | ||
操作系统 | 操作系统 | ||
硬件 | 硬件 | 硬件 | |
浏览器上的JAVA | 桌面操作系统上的JAVA | 小型操作系统上的java | Java操作系统的Java |
在Java平台结构中可以看出Java虚拟机处于核心位置,是程序与底层操作系统和硬件无关的关键,它的下方是移植接口,移植接口由两部分组成:适配器与Java操作系统,A,人们首先想到的是,java是一门编程语言,然而事实上java是一种技术,它由四部分组成:1.java编程语言、2.java类文件格式、3.java虚拟机、4.java应用程序接口。他们关系如下图所示:
在Java平台结构中可以看出Java虚拟机处于核心位置,是程序与底层操作系统和硬件无关的关键,它的下方是移植接口,移植接口由两部分组成:适配器与Java操作系统,其中依赖平台的部分称为适配器;JVM通过移植接口在具体的平台和操作系统上实现,JVM的上方是Java基础类以及相关Api,用Java api编写的应用程序和小程序无需考虑 JAVA底层平台,而可以在任何java平台上运行;JVM起到的作用就是将程序与操作系统分离,从而实现Java语言平台无关性的功能;
JVM在其生命周期内有一个明确的任务就是运行JAVA程序,因此当JAVA程序启动的时候就会产生一个JVM实例,当程序运行结束以后此实例也跟着消失了。下面我来从JVM的体系结构与它的运行过程这两个方面来对它进行比较深入的研究。
1.Java虚拟机的体系结构
每个JVM都有两种机制
a.类装载子系统 :装载适合名称的类或者接口
b.执行引擎:负责执行已装载的类或接口中包含的指令
每个JVM都包含:
方法区、JAVA堆、JAVA栈、本地方法栈、指令计数器(记录每个线程执行到的位置)以及其它隐藏的寄存器
对于JVM的学习,在我看来这几个部分最重要:
A. java代码编译和执行的整个过程
B. JVM内存管理和垃圾回收机制
下面分别对这几部分进行说明:
2.Java代码编译和执行的整个过程
也正是前面所说,java代码编译和执行的整个过程大概是:开发人员编写Java代码(.java文件),然后将之编译成字节码文件(.class文件)再然后字节码装入内存,一旦字节码进入虚拟机,它就会被解释器解释执行,或者被即时代码发生器转换为机器代码执行;
(1)Java代码编译是由Java源码编译器来完成的,也就是java代码到字节码(.class)文件的过程,流程如下图所示:
(2) Java字节码的执行 是由JVM的执行引擎来完成的
Java代码编译和执行的整个过程包含以下三个重要机制:
* Java源码编译机制
* 类加载机制
* 类执行机制
(1)java源码编译机制
Java源码编译由以下三个过程组成
* 分析和输入到符号表
* 注解处理
* 语义分析和生成字节码