虚拟机规范严格规定了有且只有5种情况必须立即对类进行“初始化”(加载、验证、准备等阶段在此之前开始)。

  1. 遇到new、getstatic、putstatic、invokestatic等4条字节码指令时。生成这4条指令的常见场景是:

    • 使用new关键字实例化对象时。
    • 读取或设置一个类的静态字段(被final修饰、已在编译期把结果放入常量池的静态字段除外)时。
    • 调用一个类的静态方法时。
  2. 使用java.lang.reflect包的方法对类进行反射调用时。
  3. 准备初始化一个类时发现其父类还没进行初始化,则先对父类进行初始化。
  4. 虚拟机启动时会先初始化用户所指定的要执行的主类(即包含main方法的那个类)。
  5. 当使用JDK 1.7 的动态语言支持时,如果一个java.lang.invoke.MethodHandle 实例最后解析结果为REF_getStatic、REF_putStatic、REF_invokeStatic的方法句柄,并且这个方法句柄对应类没有初始化时,必须触发其初始化。

总结:

  • 这5种情况都称为对一个类的主动引用,除此以外都为被动引用(被动引用不会导致类的初始化)。
  • 另说一句:JVM规范并没对类的加载时机进行强制约束,所以会视JVM的具体实现而异。

最新文章

  1. 在新浪云SAE中使用smarty引擎模版
  2. Python基础篇【第1篇】: Python基础
  3. BZOJ 2727 双十字(树状数组)
  4. Android桌面悬浮清内存app概述
  5. 安装windows操作系统
  6. initial pointer [expert c]
  7. WorkFlow4.0--入门到精通系列-专题索引
  8. 有关HTTP的粗读
  9. 关系数据标准语言SQL之数据查询
  10. [国嵌攻略][092][UDP网络程序设计]
  11. ubuntu 更改默认亮度
  12. Python Django-入门到进阶
  13. Visual Stdio 2017增加SVN支持
  14. 使用Python+turtle绘制同心圆
  15. maven编译的时候跳过test
  16. Oracle 11g direct path read 等待事件的理解
  17. Oracle错误及解决方案
  18. 【Unity笔记】制作小地图Minimap
  19. vs2012团队连接(Team Foundation Server)怎样从已登录的用户退出
  20. 充电 IC 对 0V 电池充电问题

热门文章

  1. Spring Boot(2)中的yaml配置简介
  2. 访问https接口报错 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系
  3. [Python3] 036 函数式编程 返回函数
  4. [转帖]备忘:CentOS-7 使用systemctl 管理的服务,文件打开数上限1024要改
  5. 纯前端表格控件SpreadJS以专注业务、提升效率赢得用户与市场
  6. 笛卡尔树--牛客第四场(sequence)
  7. Sentinel基本使用--基于QPS流量控制(二), 采用Warm Up预热/冷启动方式控制突增流量
  8. python3.7 利用pyhive 连接上hive(亲测可用)
  9. JS异步上传文件
  10. 韦东山嵌入式Linux学习笔记08--中断体系结构