1. 线程安全点 safe point
线程在safe point上时,可以安全得被其他JVM线程所操作和观测,不在的则不行;
线程安全点:
- 方法返回之前
- 调用某个方法之后
- 抛出异常的位置
- 循环的末尾
2. 类加载过程
- [加载] 利用双亲委派机制加载字节码文件(.class)到JVM中,将字节流代表的静态存储结构转化为方法区的运行时数据结构
- [链接]
验证 字节码格式是否正确
准备 分配内存并给所有静态变量隐式初始化
解析 将运行时常量池中的符号引用转换为实际内存地址引用,编译阶段不知道实际内存地址,当处于解析过程中,可以知道实际内存地址 - [初始化]: 显示初始化,静态变量会被赋值,静态代码块执行
3. 对象初始化过程
- 加载类,详细见上
- 分配内存
- 执行隐式初始化,成员变量赋初始值
- 执行init构造方法,成员变量赋值,构造方法
4. 双亲委派机制
- Bootstrap rt.jar
- Extension jre/lib/*.jar
- Application classpath下
- 自定义加载器 自定义路径
当需要加载一个class时,由下往上逐级查找是否已加载,如果未加载则由上级查找,j当查找到boostrap加载器时,若仍为未加载类,则由bootstrap加载器尝试加载,若无法加载则下发给下级类加载器,直至加载到类
5. JVM内存模型
- 虚拟机栈 : 包含三大块,局部变量表,
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。