学习自
https://www.cnblogs.com/ldq2016/p/9035649.html
---内存区域
共享
1.堆
2.方法区:运行时常量池,Class对象
私有
1.Java方法栈
2.Native方法栈
3.PC
---类加载机制
加载
类的全限定名——>二进制字节流——>字节码——>Class对象
(加载可能未完全加载完,就开始验证了)
验证
(如果是编译器写的类,编译器会检查,所以其实可以免掉这一步骤。所以也可以认为是编译器,嘻嘻)
1.文件格式(魔数)
2.Java语法
3.语义
4.访问权限(比如其他类的private的内部类我们是拿不到的)
准备
给static变量赋初始值
解析
符号引用解析为直接引用。比如我们代码中引用一个类、引用一个类的方法、引用一个类的成员变量,其实这些都是符号引用。
初始化
父类static——>static变量赋为真实值——>执行static代码块
---怎么卸载一个类
只有用户自带的类加载器加载出来的类才能被卸载。
1.ClassLoader不被引用
2.Class不被引用
3.这个类的对象不被引用
---怎么自定义类加载器
类加载器分为
1.启动
2.扩展
3.引用程序