参考来源
- 虚拟机类加载机制,很完整,没有错误
- [JVM如何加载一个类的过程]https://my.oschina.net/hosee/blog/652410
- 这句话是错的
- JVM ( java virtual machine) architecture - tutorial
加载步骤
- 标题中加载是一个广义的概念
- 主要包含三个主要步骤:加载(狭义的概念)、链接、初始化
- 其中链接又分为三个步骤:验证、准备、解析
加载阶段(狭义)
- 根据类的完全限定名获取类的二进制字节流
- 根据字节流将类的静态结构转化为方法区的运行时结构
- 在内存中生一个代表这个类的Class对象,作为方法区这个类的入口(通过这个class对象访问第二步的运行时结构)。虽然Class对象是对象类型,但在HotSpot虚拟机中,Class对象并没有放在java堆而放在了方法区
注意:一个类必须与类加载器一起确定唯一性,而每一个类加载器都拥有一个独立的类名称空间
- 数组加载阶段,与类加载阶段有所不同,数组加载先根据数组类的元素类型进行类型加载,如果元素类型是引用类型则先加载类,加载步骤与上面的类加载阶段相同并把数组标识在该类加载器的命名空间中,如果元素类型不是引用类型(如int [])则该数组则由引导类加载器关联,而数组类本身则由Java虚拟机直接创建。