软件设计师Java虚拟机类加载机制,个人觉得要弄清楚,可以从如下两个方面去了解:
1.什么是类加载机制及虚拟机加载类的时机。
2.加载过程。
首先看看第一个:虚拟机把描述类的数据从class文件加载到内存,并对class文件的合法性进行验证,引用转换及解析,最终形成可以被虚拟机使用的Java类型,这就是虚拟机的类加载机制。
由于java的动态扩展特点(就是可以在运行期指定具体类型),所以java的类加载过程都是在程序运行期完成。
2.虚拟机整个的加载过程可以分为7个阶段:加载-》验证-》准备-》解析-》初始化-》使用-》卸载。
1.加载,这个过程虚拟机并没有明确规定何时进行,但是规定了只有以下四种情况必须立即进行加载。
1)遇到new,getstatic,putstatic,invokestatic四条指令的时候,对应的场景:使用new关键字,读取或设置一个类的静态字段(final静态字段除外),以及调用类的静态方法的时候。
2)使用reflect包的方法进行类的反射调用的时候。
3)当初始化一个类的时候,如果他的父类没有初始化,则先要触发父类的初始化。(注意这里是父类,如果是父接口的话,是不会触发父接口初始化成员变量的操作的,除非子类有引用父接口的变量)
4)虚拟机启动时,虚拟机会首先加载用户指定的一个要执行的主类(包含main方法的)
注:以上称为主动引用。有些情况是不会触发类的加载和初始化的。如:通过子类引用父类的静态字段,不会触发子类初始化;通过数组定义来引用类,不会触发此类的初始化;调用常量不会触发定义常量的类的初始化。
在确定了什么时候会触发加载操作后,再来看看加载过程主要做些什么:
1通过类的全限定名来获取定义此类的二进制字节流。这个过程涉及到类加载器的过程,将在后面具体在写。
2将这个字节流所代表的静态存储结构转化为方法区中的运行时数据结构。方法区的数据结构每个虚拟机实现都可以不一样。
3在java堆中生成一个代表这个类的java.lang.Class对象,作为方法区这些数据的外部访问入口。
第一步到此就完成了。后面会继续介绍第二阶段验证。
软件设计师Java虚拟机类加载机制,个人觉得要弄清楚,可以从如下两个方面去了解:
1.什么是类加载机制及虚拟机加载类的时机。
2.加载过程。
首先看看第一个:虚拟机把描述类的数据从class文件加载到内存,并对class文件的合法性进行验证,引用转换及解析,最终形成可以被虚拟机使用的Java类型,这就是虚拟机的类加载机制。
由于java的动态扩展特点(就是可以在运行期指定具体类型),所以java的类加载过程都是在程序运行期完成。
2.虚拟机整个的加载过程可以分为7个阶段:加载-》验证-》准备-》解析-》初始化-》使用-》卸载。
1.加载,这个过程虚拟机并没有明确规定何时进行,但是规定了只有以下四种情况必须立即进行加载。
1)遇到new,getstatic,putstatic,invokestatic四条指令的时候,对应的场景:使用new关键字,读取或设置一个类的静态字段(final静态字段除外),以及调用类的静态方法的时候。
2)使用reflect包的方法进行类的反射调用的时候。
3)当初始化一个类的时候,如果他的父类没有初始化,则先要触发父类的初始化。(注意这里是父类,如果是父接口的话,是不会触发父接口初始化成员变量的操作的,除非子类有引用父接口的变量)
4)虚拟机启动时,虚拟机会首先加载用户指定的一个要执行的主类(包含main方法的)
注:以上称为主动引用。有些情况是不会触发类的加载和初始化的。如:通过子类引用父类的静态字段,不会触发子类初始化;通过数组定义来引用类,不会触发此类的初始化;调用常量不会触发定义常量的类的初始化。
在确定了什么时候会触发加载操作后,再来看看加载过程主要做些什么:
1通过类的全限定名来获取定义此类的二进制字节流。这个过程涉及到类加载器的过程,将在后面具体在写。
2将这个字节流所代表的静态存储结构转化为方法区中的运行时数据结构。方法区的数据结构每个虚拟机实现都可以不一样。
3在java堆中生成一个代表这个类的java.lang.Class对象,作为方法区这些数据的外部访问入口。
第一步到此就完成了。后面会继续介绍第二阶段验证。
软件设计师Java 虚拟机类加载机制,个人觉得要弄清楚,可以从如下两个方面去了解:
1.什么是类加载机制及虚拟机加载类的时机。
2.加载过程。
首先看看第一个:虚拟机把描述类的数据从class文件加载到内存,并对class文件的合法性进行验证,引用转换及解析,最终形成可以被虚拟机使用的Java 类型,这就是虚拟机的类加载机制。
由于java的动态扩展特点(就是可以在运行期指定具体类型),所以java的类加载过程都是在程序运行期完成。
2.虚拟机整个的加载过程可以分为7个阶段:加载-》验证-》准备-》解析-》初始化-》使用-》卸载。
1.加载,这个过程虚拟机并没有明确规定何时进行,但是规定了只有以下四种情况必须立即进行加载。
1)遇到new,getstatic,putstatic,invokestatic四条指令的时候,对应的场景:使用new关键字,读取或设置一个类的静态字段(final 静态字段除外),以及调用类的静态方法的时候。
2)使用reflect包的方法进行类的反射调用的时候。
3)当初始化一个类的时候,如果他的父类没有初始化,则先要触发父类的初始化。(注意这里是父类,如果是父接口的话,是不会触发父接口初始化成员变量的操作的,除非子类有引用父接口的变量)
4)虚拟机启动时,虚拟机会首先加载用户指定的一个要执行的主类(包含main方法的)
注:以上称为主动引用。有些情况是不会触发类的加载和初始化的。如:通过子类引用父类的静态字段,不会触发子类初始化;通过数组定义来引用类,不会触发此类的初始化;调用常量不会触发定义常量的类的初始化。
在确定了什么时候会触发加载操作后,再来看看加载过程主要做些什么:
1通过类的全限定名来获取定义此类的二进制字节流。这个过程涉及到类加载器的过程,将在后面具体在写。
2 将这个字节流所代表的静态存储结构转化为方法区中的运行时数据结构。方法区的数据结构每个虚拟机实现都可以不一样。
3 在java堆中生成一个代表这个类的java.lang.Class对象,作为方法区这些数据的外部访问入口。
第一步到此就完成了。后面会继续介绍第二阶段验证。
重要提醒!!内容中联系方式并非本站联系方式,报名咨询的学员请与下面最新联系方式联系我们咨询报名-以免损失!
>>长期招聘兼职招生代理人员,项目合作,团报优惠咨询,有意者请联系我们 >>咨询:13312524700(可加微信)。
云南地州中心:◆咨询电话:0871-65385921、17787865775 冯老师、 王老师(微信报名:17787865775)
总部报名地址: ◆昆明市-五华区教场东路莲花财富中心10楼;网课试听:ke.xuekaocn.cn
地州分校: 大理分校 丽江分校 迪庆分校 怒江分校 红河分校 临沧分校 玉溪分校 文山分校 保山分校 德宏分校 昭通分校 普洱分校 版纳分校 【各地州学员请加老师微信咨询报名,电话(微信):133-1252-4700】;【2021年云南省成人高考>>立即报名】
职业技能考证:心理咨询师、健康管理师、茶艺师等更多>◆咨询电话:133 1252 4700(微信)
公考培训咨询:◆国考云南省考公务员/事业单位面授培训,咨询电话:133 1252 4700 (微信)