JVM学习导图
2023-01-24 19:36:01 0 举报
AI智能生成
包括:类加载、JMM、内存分配和GC
作者其他创作
大纲/内容
类加载机制
类加载的过程
java程序的执行流程
java程序的执行需要依靠Java虚拟机JVM
通过C++创建一个引导类加载器BootstrapClassLoader
通过BootStrapClassLoader创建Launcher对象
Launcher对象的getLauncher对象进行类加载器的初始化
在通过创建出的应用类加载器AppClassLoader进行执行类的加载创建
最终JVM执行创建的执行类中的main方法
java层级类加载器执行类加载方法的流程
(即loadClass方法的执行过程)
(即loadClass方法的执行过程)
加载
校验
准备
解析
完成静态链接
直接引用
符号引用
动态链接
初始化
1.对类的静态变量初始化为指定的值;
2.执行静态代码块
类加载后的类元信息
存放在方法区
包括内容
类加载器的引用
对应class实例的引用
类加载器
分类
引导类加载器
BootstrapClassLoader
负责加载支撑JVM运行的位于JRE的lib目录下的核心类库,比如rt.jar、charsets.jar等
拓展类加载器
ExtClassLodeer
负责加载支撑JVM运行的位于JRE的lib目录下的ext扩展目录中的JAR类包
应用程序类加载器
AppClassLoader
负责加载ClassPath路径下的类包,主要就是加载你自己写的那些类
自定义类加载器
负责加载用户自定义路径下的类包
Launcher类
子类
AppClassLoader
ExtClassLoader
方法
getLauncher
获取Launcher对象
getClassLoader
获取类加载器(默认的类加载入口加载器)
返回的是一个AppClassLoader
getBootstrapClassPath
获取引导类加载器对应的jar包目录
Launcher()
Launcher的构造方法
完成Java层级类加载的初始化
初始化代码体现
ClassLoader类
getSystemClassLoader()
获取系统默认的类加载器
返回的是AppClassLoader对象
initSystemClassLoader
初始化系统类加载器
首次初始化对sclSet进行字段赋值
findClass
加载类的字节码文件并进行初始化
boolean sclSet
是否进行过了类加载器的初始化
双亲委派机制
流程
注意
核心要点
父加载器先行,父加载无法加载在使用自己进行加载
设计出发点
沙箱安全机制:防止核心API类库被随意篡改
避免类的重复加载:但父类加载器已经加载了该类时,没有必要让子类加载器再加载一次,保证别加载的类仅加载一次
代码体现
ClassLoader.loadClass(String name)
整个类加载流程
双亲委派机制的打破
JVM的内存结构
JVM的内存分配机制
垃圾收集算法和垃圾收集器
GC调优实战
0 条评论
下一页