[5-01-01].第03节:JVM启航 - JVM架构
JVM学习大纲
一、JVM的整体架构:
1.1.整体架构概述:
- 1.注意:
方法区只有HotSpot虚拟机有,J9,JRockit都没有 - 2.如果自己想手写一个Java虚拟机的话,主要考虑哪些结构呢?
类加载器执行引擎

1.2.组成成员介绍:
成员1:类加载子系统
- 核心组件类加载器,负责将字节码文件中的内容加载到内存中

成员2:运行时数据区
-
1.负责管理JVM使用到的内存,比如创建出来的对象、销毁对象、类的信息等等内容都会放在这块区域中

-
2.在众多的线程中:
- 方法区和堆是多个线程共享的
- 虚拟机栈,本地方法栈,程序计数器是每个线程独享的
成员3:执行引擎
-
1.包含了即时编译器、解释器、
垃圾回收器,执行引擎使用解释器将字节码指令解释成机器码,使用即时编译器优化性能,使用垃圾回收器回收不再使用的对象

-
2.
HotSpot VM是目前市面上高性能虚拟机的代表作之一,它采用解释器与即时编译器并存的架构,性能较高
成员4:本地接口
- 调用本地使用C/C++编译好的方法

- 本地方法在Java中声明时,都会带上native关键字,如下图所示

1.3.处理字节码文件流程:
- class文件(字节码文件)生成之后,后面的操作就需要jvm来负责了
- 第1步:通过类加载子系统将字节码文件进行加载,然后对应到内存中,生成Class的对象
- 第2步:在方法区中对一些静态变量进行初始化等操作
- 第3步:到执行引擎中执行具体的字节码指令,在逐步执行指令的时候,会使用虚拟机栈、程序计数器、堆、本地方法栈等
1.4.内存结构详细图:

二、JVM的生命周期:
2.1.虚拟机的启动:
- 1.Java虚拟机的启动是
通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类具体是哪个,是由虚拟机的具体实现指定的- 自定义的类是由系统类加载器加载的
- Object类是由引导类加载器加载的
2.2.虚拟机的执行
- 1.一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序
- 2.程序开始执行时他才运行,程序结束时他就停止
- 3.执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做
Java虚拟机的进程
2.3.虚拟机的退出:
- 1.程序正常执行结束
- 2.程序在执行过程中
遇到了异常或错误而异常终止 - 3.由于操作系统用现错误而导致Java虚拟机进程终止
- 4.某线程调用Runtime类或system类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作
- 5.除此之外,JNI(Java Native Interface - 本地方法接口)规范描述了用JNI Invocation API来加载或卸载 Java虚拟机时,Java虚拟机的退出情况
三、后续学习:
- 我们就依据这个架构图来依次学习各个部分的内容

