Oracle官网:https://www.oracle.com/cn/index.html
官网Java8的JVM规范文档:https://docs.oracle.com/javase/specs/jvms/se8/html/index.html
官网的Java规范文档:https://docs.oracle.com/javase/specs/index.html
文章目录
1、JVM与Java体系结构
一、Java及JVM简介
Java生态圈
Java:跨平台的语言
JVM:跨语言的平台
字节码
多语言混合编程
二、Java发展的重大事件
Open JDK和Oracle JDK
三、虚拟机与Java虚拟机
虚拟机
Java虚拟机
JVM的位置
四、JVM的整体结构
详细图:
五、Java代码执行流程
六、JVM的架构模型
七、JVM的生命周期
八、JVM的发展历程
HotSpot虚拟机(默认)
JRockit虚拟机
J9虚拟机
重点在HotSpot虚拟机(默认虚拟机)、JRockit虚拟机、J9虚拟机。
2、类加载子系统
一、内存结构概述
简图
详细图
二、类加载器与类的加载过程
类加载器子系统的作用
类加载器ClassLoader角色
类的加载过程
1. 加载(Loading)
2. 链接(Linking)
3. 初始化(Initialization)
初始化时,对static代码而言,是按照顺序赋值的(如在静态代码块里对一个static变量进行赋值,静态代码块在static变量声明前,编译时,会先执行静态代码块里的代码进行赋值,然后再执行声明的代码进行赋值),并且生成clinit构造器方法。
如果声明的不是static变量,并且也没有静态代码块,则不会有clinit构造器方法。
每个类都会有一个构造器,对应init构造器方法。
初始化阶段会先调用super()方法执行父类的初始化。
类在初始化时,虚拟机会自动为这个类加锁,保证只加载一次,实现线程安全。
类加载的全过程:加载、验证、准备、解析、初始化。
三、类加载器分类
虚拟机自带的加载器
虚拟机自带的加载器:引导类加载器、扩展类加载器、系统类加载器。
引导类加载器
扩展类加载器
系统类加载器
父类加载器指的是由哪个加载器来加载自己这个加载器,就是这个加载器的父类加载器,并非继承关系。
用户自定义类加载器
四、ClassLoader
获取ClassLoader的途径
五、双亲委派机制
加载类时,否则加载的类加载器会把加载请求向上委托给父类加载器,父类加载器如果有父类加载器,就会再把加载请求向上委托,直到引导类加载器。
引导类加载器如果加载的路径有被加载类,就会进行加载,否则把加载请求向下返还,扩展类加载器如果路径有被加载的类,就进行加载,否则继续向下返还,然后所有的父类加载器都不能进行加载,就由原先的类加载器完成类的加载。
先把加载请求传到引导类加载器,然后依次向下进行加载,如果能加载,则完成类的加载,其他的类加载器不会加载;如果不能加载,向下返还,直到原先的类加载器。
沙箱安全机制
六、其他
对类加载器的引用
类的主动使用和被动使用
下一篇笔记:JVM入门学习笔记——上篇:内存与垃圾回收(3-7)
学习视频(p1-p38):https://www.bilibili.com/video/BV1PJ411n7xZ?p=1