这个阶段主要完成如下3件事情
通过一个类的全限定名来获取定义此类的二进制字节流将这个字节流代表的静态存储结构转化成方法区的运行时数据结构生成一个此类的Java.lang.Class对象(方法区中),作为方法区这个类的数据的访问入口。这里获取字节流的方式并不局限于zip,还包括诸如网络中获取、运行时生成、其他文件生成、数据库读取等方式。同时相对于类加载过程的其他阶段,相对于一个非数组类的加载阶段是开发者可控性最强的,因为加载阶段既可以使用系统提供的加载器,也可以用户自定义类加载器来完成类的加载。数组类的加载情况有所不同,虽然数组类是JVM直接创建的,但是数组的组件,最终还是要依靠类加载器去加载,一个数组类创建主要有如下几点:如果数组的组件类型为引用类型,数组将会在组件的类加载器上被标识。如果组件类型不是引用类型,JVM会将数据将会与引导类加载器关联。数组的可见性与它的组件类型保持一致,如果组件的类型不是引用类型,则数据可见性默认为public。加载阶段完成后,类的二进制字节流将按照JVM所需的格式存储在方法区中,同时在内存中实例化一个java.lang.Class的实例对象,作为程序访问方法区中这些类数据的外部接口。相对于HotSpot,这个实例对象比较特殊,虽然是一个对象,但并没有放置在堆中,而是放置在方法区中。
JVM之类加载阶段
最新推荐文章于 2022-10-21 23:02:25 发布