当前位置: 首页 > news >正文

jvm的类加载过程

  • 加载
    • 通过一个类的全限定名获取定义此类的二进制字节流
    • 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
    • 在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口
  • 链接
    • 验证
      • 验证内容的合法性
    • 准备
      • 把方法区的静态变量初始化为默认值(零值)
      • 会为final修饰的常量初始化(正确的值)。
    • 解析
      • 将编译后文件的符号引用转为直接引用
  • 初始化
    • 执行类构造器方法<clinit>()的过程
    • 此方法不需要定义,是javac编译器自动收集类中的所有类变量的赋值动作和静态代码块中的语句合并起来。如果没有前述内容,则没有clinit方法
    • 构造器方法中指令按照语句在源文件中出现的顺序执行
    • 若该类具有父类,JVM会保证子类的<clinit>()方法执行前,父类的<clinit>()已经执行完毕
    • 虚拟机必须保证一个类的<clinit>()方法在多线程下被同步加锁
http://www.lryc.cn/news/2825.html

相关文章:

  • VOC数据增强与调整大小
  • Linux 安装jenkins和jdk11
  • Pandas——Series操作【建议收藏】
  • JUC并发编程Ⅰ -- Java中的线程
  • 基于vue-admin-element开发后台管理系统【技术点整理】
  • 【C语言学习笔记】:通讯录管理系统
  • 开关电源环路稳定性分析(10)——OPA和OTA型补偿器传递函数
  • 2.11知识点整理(关于pycharm,python,pytorch,conda)
  • Linux服务器开发-2. Linux多进程开发
  • Excel中缺失数据值的自动填充
  • 路由器刷固件
  • leetcode: Two Sum II - Input Array is Sorted
  • STL——list
  • 实战打靶集锦-004-My-Cmsms
  • c++代码实现我的世界(14)
  • RMQ--区间最值问题(在更)
  • 一篇文章搞懂Cookie
  • 深入解读.NET MAUI音乐播放器项目(二):播放内核
  • 4.SpringWeb
  • C++中的枚举与位域
  • 第19章 MongoDB Limit与Skip方法教程
  • 进程间通信——消息队列
  • OpenMMLab 实战营打卡 - 第 7 课
  • MAC Boook打印长图
  • web3:区块链共识机制系列-POS(Proof of Stake)股权证明算法
  • Linux fork()系统调用流程解析
  • 自定义软件帮助文档(qt assistant实现)
  • ESP32设备驱动-GPIO外部中断
  • 【安全】nginx反向代理+负载均衡上传webshel
  • 华为OD机试 - 单词接龙(Python)| 真题,思路,知识点