JVM体系结构和工作方式

一、JVM体系结构

JVM体系结构分为4部分

                  类加载器、执行引擎、内存区、本地方法调用

1. 类加载器:在JVM启动时,负责加载class文件到JVM中

                      类加载器将在分析Classloader中详细介绍

2.执行引擎:负责执行class文件中的字节码,相当于计算机的cpu

                     执行引擎是JVM的核心部分,它负责解析JVM字节码指令并得到执行的结果,Java虚拟机规范中定义了遇到字节码指令时应该处理什么,并且应该得到什么结果,但具体的执行方式并没有定义,而是由JVM厂家自己去实现。每

                     执行引擎就是执行一条条代码的一个流程,也就是执行一个个java方法的流程。实际上,每个java线程就是一个执行引擎的实例

3.内存区: 将内存划分成多个区,模拟实际机器中的存储、记录、调度功能模块

                     在JVM执行过程中需要保存一些信息,如操作码的操作数、执行的返回结果等,还有class类的字节码等信息都要在JVM执行前就准备好。这些数据都是存储在内存区。

                      JVM内存区分为:方法、java堆、java栈、PC寄存器和本地方法区。方法去和java堆是线程共享的。而Java栈和PC寄存器是在每个执行引擎实例(即线程)创建时单独分配的,是线程间不共享的,java栈中保存的是方法的参数、变量、返回值等信息,PC寄存器是指向即将执行的吓一条指令的指针。

4.本地方法调用:调用C、C++实现的本地方法的代码返回结果


二、JVM工作机制

1.JVM为何要基于栈的架构

JVM执行字节码指令是基于栈的架构,所有操作数都要先入栈

理由:1、JVM要设计成与平台无关的,即在有很少或没有寄存器的机器上也能正常执行

           2、为了指令的紧凑性。因为java的字节码有可能在网络上传输,会节省空间


2.执行引擎的架构设计

每当创建一个新线程时,JVM会为这个线程创建一个Java栈和一个PC寄存器,并且寄存器会指向这个线程的第一行可执行代码。

每当访问一个新方法时,会在栈中创建一个新的栈帧数据结构,这个栈帧会保留这个方法的一些元信息。

你可能感兴趣的:(JVM体系结构和工作方式)