jvm结构及运行原理
- Java与jvm那些不得不说的故事
Java是一种技术,它由四方面组成:Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Java API)。
关系图:
运行期环境代表着Java平台,开发人员编写Java代码(.java文件),然后将之编译成字节码(.class文件),再然后字节码被装入内存,一旦字节码进入虚拟机,它就会被解释器解释执行,或者是被即时代码发生器有选择的转换成机器码执行。
Java平台由Java虚拟机和Java应用程序接口搭建,Java语言则是进入这个平台的通道,用Java语言编写并编译的程序可以运行在这个平台上。
平台结构图:
在Java平台的结构中,Java虚拟机(JVM)处在核心的位置,是程序与底层操作系统和硬件无关的关键。
移植接口由两部分组成:适配器和Java操作系统, 其中依赖于平台的部分称为适配器;JVM通过移植接口在具体的平台和操作系统上实现;
Java的基本类库和扩展类库以及它们的API, 利用Java API编写的应用程序(application) 和小程序(Java applet) 可以在任何Java平台上运行而无需考虑底层平台。
有Java虚拟机(JVM)实现了程序与操作系统的分离,从而实现了Java 的平台无关性。
JVM在它的生存周期中有一个明确的任务,那就是运行Java程序,因此当Java程序启动的时候,就产生JVM的一个实例;当程序运行结束的时候,该实例也跟着消失了。
- Java虚拟机的体系结构
- 每个JVM都有两种机制:
- 类装载子系统:装载具有适合名称的类或接口
- 执行引擎:负责执行包含在已装载的类或接口中的指令
- 每个JVM都包含:
方法区、Java堆、Java虚拟机栈、本地方法栈、PC寄存器
- Java代码编译和执行的整个过程
Java代码的编译和执行的整个过程大概是:开发人员编写Java代码(.java文件),然后将之编译成字节码(.class文件),再然后字节码被装入内存,一旦字节码进入虚拟机,它就会被解释器解释执行,或者是被即时代码发生器有选择的转换成机器码执行。
- Java代码编译是由Java源码编译器来完成,也就是Java代码到JVM字节码(.class文件)的过程。 流程图如下所示:
- Java字节码的执行是由JVM执行引擎来完成,流程图如下所示:
Java代码编译和执行的整个过程包含了以下三个重要的机制:
+ Java源码编译机制(静态编译与动态解释,也有即时编译器JIT编译器补充)
+ 类加载机制
+ 类执行机制
- 原理
JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种基于下层的操作系统和硬件平台并利用软件方法来实现的抽象的计算机,可以在上面执行java的字节码程序。
java编译器只需面向JVM,生成JVM能理解的代码或字节码文件。Java源文件经编译器,编译成字节码程序,通过JVM将每一条指令翻译成不同平台机器码,通过特定平台运行。
JVM执行程序的过程:
- 加载.class文件
- 管理并分配内存
- 执行垃圾收集
JRE(java运行时环境)包含JVM的java程序的运行环境
JVM是Java程序运行的容器,但是他同时也是操作系统的一个进程,因此他也有他自己的运行的生命周期,也有自己的代码和数据空间。
JVM在整个jdk中处于最底层,负责与操作系统的交互,用来屏蔽操作系统环境,提供一个完整的Java运行环境,因此也叫虚拟计算机。
操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境:
- 创建JVM装载环境和配置
- 装载JVM.dll
- 初始化JVM.dll并挂接到JNIENV(JNI调用接口)实例
- 调用JNIEnv实例装载并处理class类。