类的加载过程:加载,验证,准备,解析,初始化,之后变为类元信息,放在方法区内存中去的。
加final时候是常量。
符号是有地址的,符号加载到jvm方法区的内存地址是直接引用。
地址是静态的链接。
动态链接:运行到的时候才会去解析的。
直接内存和堆内存:https://blog.csdn.net/u012895369/article/details/80464985
JVM模型:https://blog.csdn.net/qq_28764557/article/details/101229990
.java编译为.class,通过类装载子系统,初始化之后加载到jvm模型中。
.class文件(编译) 加载 验证 准备 解析 初始化 然后到jvm中。
一共5步。
参考:https://blog.csdn.net/u013541140/article/details/97375248
启动类记载器加载的类在哪里?
扩展类加载器:
启动类加载器 扩展类加载器 应用程序类加载器 自定义的类加载器
类加载器的核心认识:
启动类加载器是c语言写的。
--------------------------------------------------------------------------------
自定义的类加载器:两个核心的方法。
前提是不打破双亲委派的原则。
自定义的类加载器要重写的是findClass方法。
------------------------
双亲委派原则,要是类路径下有User1的话就用应用类加载器加载,不用自定义的加载器加载了。
自定义的类加载器的路径。
----
如果这个类在classpath路径也有会被应用类记载器截胡。
-------------------
自定义类加载器,继承类,覆盖findClass方法。
--------------------
双亲委派机制:
-----------------
下半节课。
-----------------
面试的点:打破双亲委派。
双亲委派希望的是:虽然根路径不一样,但是,同一个类,在相同的包名下面只有一份的。
如何打破双亲委派机制:重写loadClass。
类加载器里面就是findclass和loadclass方法。
------
打破双亲委派:https://www.cnblogs.com/joemsu/p/9310226.html
1.重写classload方法
2.线程上下文类加载器
--
tomcat为例子:
tomcat的几个类加载器:
----
如何打破双亲委派机制:
重写loadClass方法。
---