首页 > 编程知识 正文

java动态创建类并加载到jvm,jvm内部的类加载机制

时间:2023-05-03 17:42:10 阅读:32574 作者:2456

本文介绍了Java类加载机制的步骤。 请参阅以下详细内容。

类加载机制

类从加载到虚拟机内存中,到从内存中卸载;加载、验证、准备、分析、初始

加载类的时间

活动引用:当类被活动引用时,初始化过程开始。 加载、验证和准备必须在此之前开始。

1 )遇到new、getstatic、putstatic或invokestatic四字节代码指令时,如果类未初始化,必须首先触发初始化。 生成这四个指令的最常见的Java代码场景是,在使用new关键字实例化对象时,在读取或设置用final限定的类的静态字段时,编译器将结果放在常量池中的静态字段除外

2 )如果使用java.lang.reflect包中的方法反射调用类,则必须首先触发初始化(如果类尚未初始化)。

3 )初始化类时,如果发现父类尚未初始化,则必须触发父类的初始化。

4 )虚拟机启动时,用户必须指定要运行的包含主类(main )方法的类)。 虚拟机首先初始化这个类。

5 )使用jdk7动态语言支持时,java.lang.invoke.MethodHandle实例的最后一个分析结果REF_getStatic、REF_putStatic、REF_invokeStatic

被动引用:如果某个类是被动引用,则该类不会启动初始化过程

1 )在子类中引用父类的静态字段不会初始化子类。 对于静态字段,只会初始化直接定义该字段的类,因此在子类中引用父类中定义的静态字段只会触发父类的初始化,而不会触发子类的初始化。

2 )在数组定义中引用类,不引起这样的初始化。

3 )常量在编译阶段存储在调用类的常量池中,本质上不直接引用定义常量的类,因此不会触发定义常量的类的初始化。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。