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层级类加载器执行类加载方法的流程<br>(即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()<br>
Launcher的构造方法
完成Java层级类加载的初始化<br>
初始化代码体现
ClassLoader类
getSystemClassLoader()<br>
获取系统默认的类加载器
返回的是AppClassLoader对象
initSystemClassLoader<br>
初始化系统类加载器
首次初始化对sclSet进行字段赋值
findClass
加载类的字节码文件并进行初始化
boolean sclSet<br>
是否进行过了类加载器的初始化
双亲委派机制
流程
注意
核心要点
父加载器先行,父加载无法加载在使用自己进行加载<br>
设计出发点
沙箱安全机制:防止核心API类库被随意篡改
避免类的重复加载:但父类加载器已经加载了该类时,没有必要让子类加载器再加载一次,保证别加载的类仅加载一次
代码体现
ClassLoader.loadClass(String name)
整个类加载流程
双亲委派机制的打破
JVM的内存结构
JVM的内存分配机制
垃圾收集算法和垃圾收集器
GC调优实战
0 条评论
下一页