1、JVM 类加载
1、JVM类加载
1.0 JVM 类加载机制
JVM的类加载机制,总共分为 5 部分,加载,验证,准备,解析,初始化。
加载
将该类解析成二进制字节流
将表示该类的二进制流,转储为方法区运行时的数据结构。
在堆中生成一个表示该数据结构的对象,然后该对象作为 访问该数据结构的入口
验证
这一段主要是保证加载出的二进制字节流符合JVM虚拟机的要求,保证不会对虚拟机造成伤害。
准备
验证完之后,发现没有问题,我们开始对类分配内存,初始化默认值等。
解析
将常量池内的符号引用替换为直接引用的过程
符号引用:使用一组符号来描述所引用的目标,符号可以是任何形式的字面量。
直接引用:直接引用时可以直接指向目标的指针、相对偏移量或者是一个能间接定位到目标的句柄。
初始化
JVM开始真正执行JAVA类中编写的代码,将主导权交给应用程序。
1.1 什么是类加载器
通过一个类的全限定名来
获取描述此类的二进制字节流”。
类加载器的主要分为这几种,启动类加载器,拓展类加载器,程序类加载器。用户自定义类加载器。
另外的话,判断两个类是否相同,需要判断是否使用同一个类进行加载,如果来自于一个 Class文件,但是不是一个加载器加载的话,那也不是同一个类。
1.2 JVM类加载模型
类加载过程使用双亲委派机制进行加载
1.3 说说双亲委派机制
加载过程:除了启动类加载器,其余所有的类加载器都有父加载器,他们之间为组合关系。
双亲委派加载过程:某个类加载器在收到加载过程之后,首先不会自己去尝试加载,会优先请求自己的父加载器进行加载。(如果加载过,则返回给子加载器)进行不断向上请求,直到启动类加载器,如果启动类加载不了,再下沉到子加载器进行加载。
1.4 双亲委派机制的意义
防止某些系统级别的类被篡改,因为这些类已经被 启动类加载器加载过了,所以其他类没有机会再去加载了,进而防止了一个恶意代码注入的问题。
1.5 如何打破双亲委派机制
双亲委派模型只是虚拟机的规范,比如我们设置的类则可以不遵守这个规范,重写 loadClass方法即可。
1.6 内存模型

