课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
验证是我们在学习java虚拟机编程开发知识的时候需要重点掌握的一个编程知识,而今天我们就一起来了解一下,java虚拟机类加载验证包含哪些类型。
1、文件格式验证。主要目的是保证输入的字节流能正确的解析并存储在方法区中,格式上符合一个Java类型信息的要求。这个阶段的验证是基于二进制字节流进行的,只有通过了这个阶段的验证,字节流才能进入方法区进行存储,所有后面的3个阶段的验证都是基于方法区的存储结构进行的,不会直接操作字节流。
2、元数据验证。这一阶段的主要目的是对类的元数据(定义数据的数据)信息进行语义校验,确保不存在不符合Java语言规范的元数据信息。包括:该类是否有父类、该类的父类是否继承了不允许被继承的类、该类中的字段和方法是否与父类产生矛盾等等。
3、字节码验证。目的是通过数据流和控制流分析,确定程序语义是否合法、符合逻辑。在二阶段对元数据信息的数据类型做完校验后,这个阶段将对类的方法体进行分析,保证被校验的类的方法在运行时不会危害虚拟机的安全。
4、符号引用验证。符号引用验证发生在虚拟机将符号引用转化为直接引用的时候,这个转化动作是在连接的三阶段——解析阶段中进行的。符号引用验证的目的是确保解析动作能够正常执行。
对于类加载机制而言,验证阶段是一个非常重要、但不是一定必要的阶段。如果所运行的全部代码都已经被反复使用和验证过了,那么就可以使用虚拟机参数-Xverify:none来关闭大部分的类验证措施,以缩短类加载的时间。
验证是我们在学习java虚拟机编程开发知识的时候需要重点掌握的一个编程知识,而今天我们就一起来了解一下,java虚拟机类加载验证包含哪些类型。
1、文件格式验证。主要目的是保证输入的字节流能正确的解析并存储在方法区中,格式上符合一个Java类型信息的要求。这个阶段的验证是基于二进制字节流进行的,只有通过了这个阶段的验证,字节流才能进入方法区进行存储,所有后面的3个阶段的验证都是基于方法区的存储结构进行的,不会直接操作字节流。
2、元数据验证。这一阶段的主要目的是对类的元数据(定义数据的数据)信息进行语义校验,确保不存在不符合Java语言规范的元数据信息。包括:该类是否有父类、该类的父类是否继承了不允许被继承的类、该类中的字段和方法是否与父类产生矛盾等等。
3、字节码验证。目的是通过数据流和控制流分析,确定程序语义是否合法、符合逻辑。在二阶段对元数据信息的数据类型做完校验后,这个阶段将对类的方法体进行分析,保证被校验的类的方法在运行时不会危害虚拟机的安全。
4、符号引用验证。符号引用验证发生在虚拟机将符号引用转化为直接引用的时候,这个转化动作是在连接的三阶段——解析阶段中进行的。符号引用验证的目的是确保解析动作能够正常执行。
对于类加载机制而言,验证阶段是一个非常重要、但不是一定必要的阶段。如果所运行的全部代码都已经被反复使用和验证过了,那么就可以使用虚拟机参数-Xverify:none来关闭大部分的类验证措施,以缩短类加载的时间。