何谓JVM
JVM(Java Virtual Machine) 经过模拟一个计算机来达到一个计算机所具备的计算功能
-
指令集:计算机所能识别的机器语言的命令集合
-
计算单元:能识别而且控制指令执行的功能模块
-
寻址方式:地址的位数、最小地址和最大地址范围,以及地址的运行规则
-
寄存器:包括操做数寄存器、变址寄存器、控制寄存器等的定义、数量和使用方式
-
存储单元:可以存储操做数寄存器和保存操做结构的单元
指令集与汇编语言:
-
指令集:能够直接执行的二进制代码;
-
汇编语言:与二进制代码对应的的助记符;
JVM 体系结构详解
一、类加载器:在JVM启动时或者在类运行时将须要的class加载到JVM中
二、执行引擎:负责执行class文件中包含的字节码指令集,至关于cpu
三、内存区:将内存划分红若干个区以模拟实际机器上的存储、记录和调度功能模块
四、本地方法调用:调用C或者C++实现的本地方法代码返回结果
机器如何执行代码,
通常程序运行到执行的过程:
源代码——>预处理——>编译器——>汇编程序——>目标代码——>连接器——>可执行程序
基本运算分解为二进制位运算,这些运算又经过指令来完成,而指令的核心目的是肯定须要运算的种类(操做码)和运算须要的数据(操做数),以及从哪里来(寄存器或栈)获取操做数、将运算结果放到什么地方(寄存器或栈)
JVM为什么选择基于栈的架构
全部操做数必须先入栈,再根据指令中的操做码选择从栈顶弹出若干个元素进行计算后压入栈中。JVM中操做数能够存放在每个栈顶中的一个本地变量集中,即每一个方法调用时就会给这个方法分配一个本地变量集,这个变量集在编译时已经肯定,因此操做数入栈能够直接是常量入栈或从本地变量集中取一个变量压入栈中。
理由:一、跨平台二、java源文件编译成class文件,编译器通常采用以栈为基础的结构向链接器或者优化器传递这种编译的中间结果,JVM能够做为链接器使用,也可做为优化器使用三、为了指令集的紧凑性(常量池)
执行引擎的架构设计
每当建立一个新的线程,JVM会为这个线程建立一个Java栈,同时会为这个线程分配一个PC寄存器,而且这个PC寄存器会指向这个线程的第一行可执行代码。每当调用一个新的方法时会在这个栈上建立一个新的栈帧数据结构,以便保留此方法的元信息。