JVM 知识梳理
2021-06-04 14:38:48 8 举报
虚拟机知识和类加载过程梳理
作者其他创作
大纲/内容
类初始化顺序:1.先父类,后子类;2.先静态(准备阶段已经完成),后非静态;3.先声明,后赋值;4.先属性,后方法(构造方法)。
GC 回收
启动类加载器(Bootstrap CLass Loader)
动态链接
方法集合
方法
1.文件格式验证2.元数据验证3.字节码验证4.符号引用验证5...
解析(Resolution)
卸载(Unload)
栈帧(stack frame)
操作数栈
自定义加载器(User-Defined CLass Loader)
存放对象实例的内存区域随虚拟机启动,线程共享
栈(stack)
把class常量池符号引用变为直接引用
属性集合
和Native方法相关
局部变量表
向上委托
1.String文本值2.int 等基本数据类型3.Final常量
类初始化情形:1.New 对象2.反射对象3.触发父类初始化4.该类含有Main方法
运行时常量池(根据class常量生池生成)
静态属性(准备阶段初始化)
本地方法区
1.为静态变量赋分配内存并初始值2.为静态常量赋分配内存并设定值
常量池
加载$JAVA_HOME/jre/lib/ext/*.jar
拓展类加载器(Extension CLass Loader)
Java.lang.ClassLoader 子类,用户自定义加载类的方式
间接引用
堆(Heap)
类,父类,接口索引集合
当前方法指向运行时常量池中的引用
字符串常量池
类信息
Jdk版本号
属于堆外内存,受物理内存限制随虚拟机启动,线程共享
直接引用
字段信息
1.类全限定名称2.方法名和描述符3.属性名和描述符
准备(preparation)
魔术数字
其他信息
class文件
1.标记当前线程代码执行到哪一行2.唯一不会发生OOM 的内存区域
程序计数器
系统类加载器(Application CLass Loader)
属性
方法区(元空间 Metaspace)
JVM(虚拟机)
加载$JAVA_HOME/jre/lib/rt.jar
Java对象实例
init
方法出口
加载$CLASS_PATH/*
加载(Loading)
访问标记
把类加载到内存中去
字段集合
符号引用
初始化(Initialzation)
方法信息
class对象
校验(Verification)
字面量
使用(Using)
0 条评论
下一页