作为一名Java使用者,掌握JVM的体系结构也是必须的。说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成。

Java编程语言

Java类文件格式

Java虚拟机

Java应用程序接口(Java API)。
JVM学习笔记(一)
运行期环境代表着Java平台,开发人员编写Java代码(.java文件),然后将之编译成字节码(.class文件),再然后字节码被装入内存,一旦字节码进入虚拟机,它就会被解释器解释执行,或者是被即时代码发生器有选择的转换成机器码执行。

Java平台由Java虚拟机和Java应用程序接口搭建,Java语言则是进入这个平台的通道,用Java语言编写并编译的程序可以运行在这个平台上。这个平台的结构如下图所示:
JVM学习笔记(一)
在Java平台的结构中, 可以看出,Java虚拟机(JVM) 处在核心的位置,是程序与底层操作系统和硬件无关的关键。

它的下方是移植接口,移植接口由两部分组成:适配器和Java操作系统, 其中依赖于平台的部分称为适配器;JVM 通过移植接口在具体的平台和操作系统上实现;在JVM 的上方是Java的基本类库和扩展类库以及它们的API, 利用Java API编写的应用程序(application) 和小程序(Java applet) 可以在任何Java平台上运行而无需考虑底层平台, 就是因为有Java虚拟机(JVM)实现了程序与操作系统的分离,从而实现了Java 的平台无关性。

JVM在它的生存周期中有一个明确的任务,那就是运行Java程序,因此当Java程序启动的时候,就产生JVM的一个实例;当程序运行结束的时候,该实例也跟着消失了。下面我们从JVM的体系结构和它的运行过程这两个方面来对它进行比较深入的研究。

1、Java虚拟机的体系结构

·每个JVM都有两种机制:

①类装载子系统:装载具有适合名称的类或接口

②执行引擎:负责执行包含在已装载的类或接口中的指令

·每个JVM都包含:

方法区、Java堆、Java栈、本地方法栈、指令计数器及其他隐含寄存器
JVM学习笔记(一)
JVM学习笔记(一)

  1. 类加载子系统,参考笔记类加载器
    JVM学习笔记(一)

类加载器:

读取Class文件,并将其转换成虚拟机可以使用的对象,将类的信息存到方法区中

方法区:

存储加载器传递的类的信息

存放常量池信息,包括字符串和数字常量

java堆

堆的区域是线程共享的

堆得内存大小由jvm决定

存储创建的对象信息

java栈

每一个线程都有一个栈

线程创建的时候创建

保存帧空间

举例,递归中,方法每次调用自己的时候,要进行压栈操作么,

当一个新的方法压栈的时候原来的方法中还有其他地方没有运行完,

还有一些数据需要保存, 这个保存点就叫做栈帧

方法保存那些没运行的地方或者数据的节点叫做栈帧;

保存局部变量,对象地址,方法,方法参数,还有方法的调用信息

直接内存

是物理内存的映射,大小不由虚拟机分配,理论上大小无限,实际按照物理内存的大小

允许java的NIO模块直接调用

垃圾回收系统

作用在java堆,java栈,方法区中

自动化,不需要手动,会自动检测,标识,寻找无用的对象并进行回收,全程静默

本地方法栈

存放本地方法

本地方法指的是当前操作系统的api,虚拟机是需要本地系统的api才能够运行的,所以存在很多种不同的虚拟机;

pc寄存器

主要用来分辨某一个线程正在操作的方法类型,并且被虚拟机选择调用虚拟机自己的方法

如果当前线程正在执行的是本地操作系统的方法,会返回undefine

如果在操作虚拟机方法,则返回该方法

ps:虚拟机中不可能只存在一条线程,虚拟机中的线程任意状态一定是在执行方法;

执行引擎

执行引擎负责执行虚拟机的字节码,都采用 JIT (Just In Time) 即时编译,编译成机器码后再执行

相关文章: