虚拟机加载机制读后感
周末花了两个小时左右阅读了一下,深入理解Java虚拟机第七章有关虚拟机加载的相关知识,主要要点记录如下。
1,java虚拟机加载的过程(狭义的理解就是虚拟机将class文件加载到内存的方法区的过程)主要经历:
加载=》验证=》准备=》解析=》初始化=》使用=》卸载
2,其中初始化过程与我们平时写的应用关系最大。虚拟机规定了有且仅有一下五中条件,才会对类进行初始化。
a, new对象以及对类的静态变脸进行读写
b, 初始化子类之前需要初始化父类
c, 程序启动时main函数所在的类
d, 使用反射使用类的时候
e,java.lang.invoke.MethodHandle实例解析的结果是REF_static。。。(不太理解)
3,同一个class文件被不同的类加载器加载后instanceof,equals的结果都不等。
4,委派双亲模型,在使用加载器的时候优先使用父类加载器,如果父类加载器没法加载,才使用自己的加载器。
5,应用程序类加载器(程序的默认加载器)和线程上下文类加载器两中类型加载器。其中线程上下文类加载器可以通过setContextClassLoader进行设置,如果当前线程没有设置则继承父类的,如果都没有就使用应用程序类加载器。