深入了解java虚拟机之 初识JVM

java技术由java编程语言、java类文件、java虚拟机、java API四个部分组成。
在这里插入图片描述
JVM的三种解释:
对JVM规范的的比较抽象的说明;
  对JVM的具体实现;
  在程序运行期间所生成的一个JVM实例。
JVM的作用:
Java虚拟机(JVM) 处在核心的位置,是程序与底层操作系统和硬件无关的关键。它的下方是移植接口,移植接口由两部分组成:适配器和Java操作系统, 其中依赖于平台的部分称为适配器;JVM 通过移植接口在具体的平台和操作系统上实现;在JVM 的上方是Java的基本类库和扩展类库以及它们的API, 利用Java API编写的应用程序(application) 和小程序(Java applet) 可以在任何Java平台上运行而无需考虑底层平台, 就是因为有Java虚拟机(JVM)实现了程序与操作系统的分离,从而实现了Java 的平台无关性

JVM体系结构
每个JVM都有两种机制,一个是装载具有合适名称的类(类或是接口),叫做类装载子系统;另外的一个负责执行包含在已装载的类或接口中的指令,叫做运行引擎。每个JVM又包括方法区、堆、 Java栈、程序计数器和本地方法栈这五个部分,这几个部分和类装载机制与运行引擎机制一起组成的体系结构图。

在这里插入图片描述
ClassLoader将符合文件结构的类文件加载入内存;至于能否运行,是由Execution Engine决定的。
执行引擎:执行引擎也叫做解释器(Interpreter),负责解释命令,提交操作系统执行。
在java虚拟机规范中,执行引擎的行为是由指令集所决定的,java指令集中的指令包含一个单字节的操作符,用于指定要执行的操作,还有0或者多个操作数,用于提供操作所需的参数和数据。
执行引擎所依赖的指令系统只是一个dowhile循环操作,十分简单,所以JVM的执行过程非常简单,执行效率高。
JVM的每个实例都有一个它自己的方法域和一个堆,运行于JVM内的所有的线程都共享这些区域;当虚拟机装载类文件的时候,它解析其中的二进制数据所包含的类信息,并把它们放到方法域中;当程序运行的时候,JVM把程序初始化的所有对象置于堆上。而每个线程创建的时候,都会拥有自己的程序计数器和 Java栈,其中程序计数器中的值指向下一条即将被执行的指令,线程的Java栈则存储为该线程调用Java方法的状态;本地方法调用的状态被存储在本地方法栈,该方法栈依赖于具体的实现。

我们通过一个具体的HelloWorld类的加载过程来看一下JVM的运行过程。
虚拟机通过调用HelloWorld类的方法main启动,传递给main一个字符串数组参数,使指定的类被装载(使用classLoader装载类,将该类的class文件/字节码文件、二进制表加载到内存中执行),类被装载后同时在main方法被调用之前,必须对类 HelloApp与其它类型进行链接然后初始化,一个类在初始化之前它的父类必须被初始化。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/mulinsen77/article/details/84391796