Java之类加载的时机

第一个问题:字节码文件(类)被加载到虚拟机内存中的时机有哪些呢?

第二个问题:什么情况下不会引起字节码文件(类)的加载?

带着这两个问题,开始下面的故事………………

注意:此处的类,可能是一个class、也可能是一个interface

 

0、new一个对象的时候

字节码指令是new

 

1、访问一个静态变量

字节码指令是getstatic

 

2、赋值一个静态变量

字节码指令是putstatic

 

3、调用一个静态方法

字节码指令是invokestatic

 

4、反射一个类的时候

 

5、类在加载的时候,基类一定会先得到加载

 

6、虚拟机进程创建后并启动时,指定的入口类会被加载

 

7、动态语言的支持,java.lang.invoke.MethodHandle对象最后的解析结果是REF_getStatic、REF_putStatic、REF_invokeStatic的方法句柄时??? 类会得到加载…………,这条还不稳

 

类(字节码文件可能是类、也可能是接口)若未加载,才会加载……………………

类(字节码文件可能是类、也可能是接口)若未加载,才会加载……………………

类(字节码文件可能是类、也可能是接口)若未加载,才会加载……………………

 

8、四种不会引发类加载的情况

a、子类引用父类的静态变量,子类不会加载

b、数组中的元素,元素类不会加载

c、其他类的常量在【编译阶段】已经存入调用类的常量池中了,显然其他类就没有必要加载了

d、一个接口类在加载的时候,它的父接口是不用加载的,只有真正用到父接口的时候才会加载父接口

你可能感兴趣的:(Java,综合)