史诗级详解面试中JVM的加载
- 1.1Java运行时一个类是什么时候被加载的?
- 1.2JVM一个类的加载过程?
- 1.3一个类被初始化的过程?
- 1.4继承时父子类的初始化顺序是怎样的?
- 1.5究竟什么是类加载器?
- 1.6JVM有哪些类加载器?
- 1.7JVM中不同的类加载器加载哪些文件?
- 1.8JVM三层类加载器之间的关系是继承吗?
- 1.9你了解JVM类加载的双亲委派模型吗?
- 1.10JDK为什么要设计双亲委派模型,有什么好处?
- 1.11可以打破JVM双亲委派模型吗?如何打破JVM双亲委派模型?
- 1.12如何自定义自己的类加载器?
- 1.13ClassLoader中的loadClass()、findClass()、defineClass()区别?
- 1.14你了解Tomcat 的类加载机制吗?
- 1.15为什么Tomcat要破坏双亲委派模型?
- 1.16有没有听说过热加载和热部署,如何自己实现一个热加载?
1.1Java运行时一个类是什么时候被加载的?
一个类在什么时候开始被加载,《Java虚拟机规范》中并没有进行强制约束,交给了虚拟机自己去自由实现,HotSpot虚拟机是按需加载,在需要用到该类的时候加载这个类;
1、Sun公司最早的 Classic虚拟机;
2、Sun/Oracle公司的HotSpot虚拟机;
3、BEA公司的JRockit虚拟机;
4、IBM公司的IBM J9虚拟机;
官方:https://docs.oracle.com/javase/8/
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
-XX:+TraceClassLoading
1.2JVM一个类的加载过程?
一个类从加载到jvm内存,到从jvm内存卸载,它的整个生命周期会经历7个阶段:
1、加载(Loading)
2、验证(Verification)
3、准备(Preparation)
4、解析(Resolution)
5、初始化(Initialization)
6、使用(Using)
7、卸载(Unloading)
其中验证、准备、解析三个阶段统称为连接(Linking);