JVM如何加载一个类的过程

参考来源

加载步骤

  • 标题中加载是一个广义的概念
  • 主要包含三个主要步骤:加载(狭义的概念)、链接、初始化
  • 其中链接又分为三个步骤:验证、准备、解析
  • image.png
  • image.png
  • image.png
  • image.png
  • image.png
  • image.png

加载阶段(狭义)

    1. 根据类的完全限定名获取类的二进制字节流
    1. 根据字节流将类的静态结构转化为方法区的运行时结构
    1. 在内存中生一个代表这个类的Class对象,作为方法区这个类的入口(通过这个class对象访问第二步的运行时结构)。虽然Class对象是对象类型,但在HotSpot虚拟机中,Class对象并没有放在java堆而放在了方法区

注意:一个类必须与类加载器一起确定唯一性,而每一个类加载器都拥有一个独立的类名称空间

  • 数组加载阶段,与类加载阶段有所不同,数组加载先根据数组类的元素类型进行类型加载,如果元素类型是引用类型则先加载类,加载步骤与上面的类加载阶段相同并把数组标识在该类加载器的命名空间中,如果元素类型不是引用类型(如int [])则该数组则由引导类加载器关联,而数组类本身则由Java虚拟机直接创建。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,142评论 25 708
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,760评论 18 399
  • 声明:原创文章,转载请注明出处。http://www.jianshu.com/u/e02df63eaa87 1、什...
    唐影若凡阅读 533评论 0 4
  • 我觉得你的可爱 像是冷天里厚厚的棉被 我躲在里面傻笑着 仿佛躲进了秋日的阳光里 我的可爱像是你养了一只春天的猫 慵...
    南逢酒馆阅读 169评论 0 0
  • 也不用太白,亚洲人都差不多,再加上晒呢。实际我也不担心,因为这个你肯定比我更在意,你都能接受我更没问题了,平常也就...
    Medon阅读 373评论 0 0