JVM整体结构
- HotSpot VM是市面上高性能虚拟机的代表作之一。
- 它采用解释器与即时编译器并行的架构(Java是半解释型,半编译型语言)。
- 虚拟机铭言:一次编译,到处运行。
- 执行引擎包括:解释器,JIT及时编译器,GC。
线程私有的:
- 程序计数器
- 虚拟机栈
- 本地方法栈
线程共享:
- 堆
- 方法区
- 直接内存
初步认识双亲委派模型
双亲委派模式要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器,请注意双亲委派模式中的父子关系并非通常所说的类继承关系,而是采用组合关系来复用父类加载器的相关代码,类加载器间的关系如下:
双亲委派模式是在Java 1.2后引入的,其工作原理的是,如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式。
对java核心源代码的保护,也被称之为沙箱安全机制。
类加载器
可以对class文件进行反编译来研究JVM运行时的流程。
控制台命令:javap -v 名称.class
1. 类加载子系统的内部包含三部分:加载、链接、初始化。
- 加载
- 链接
- 初始化
2. 类加载器的分类
- 对于用户自定义类来说,默认使用系统类加载器加载。
- Java的核心类库都是使用引导类加载器进行加载的。因为引导类加载器是使用c语言和c++写的并且只管核心类库,所以在获取该加载器时,控制台打印为null。
- 除了引导类加载器外,其余类加载器都是java写的。
- 其他
运行时数据区及线程
java8以后,方法区被换成了元空间。
程序计数器
- 关于程序计数器的问题
虚拟机栈
1. 栈的运行原理
2. 栈的内部结构
- 局部变量表
- 操作数栈
- 栈顶缓存技术
- 动态链接
- 方法调用
- 方法返回地址
3. 本地方法栈
- 本地方法接口
- 本地方法栈