课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
类加载技术是程序员在学习java编程开发的时候需要重点掌握的一个编程技术,下面我们就一起来了解一下,java编程类加载方法都有哪些。
(1)验证(Verify)
目的是保证Class文件的字节流中包含的信息符合当前虚拟机的要求,保证被加载类的正确性,不会危害虚拟机的自身安全。
主要分为四种验证方式:文件格式验证、元数据验证、字节码验证、符号引用验证。
文件格式验证:主要验证字节流是否符合Class文件格式规范,并且能被当前的虚拟机加载处理。例如:主、次版本号是否在当前虚拟机处理的范围之内。常量池中是否有不被支持的常量类型。指向常量的中的索引值是否存在不存在的常量或不符合类型的常量。
元数据验证:对字节码描述的信息进行语义的分析,分析是否符合java的语言语法的规范。
字节码验证:重要的验证环节,分析数据流和控制,确定语义是合法的,符合逻辑的。主要的针对元数据验证后对方法体的验证。保证类方法在运行时不会有危害出现。
符号引用验证:主要是针对符号引用转换为直接引用的时候,是会延伸到三解析阶段,主要去确定访问类型等涉及到引用的情况,主要是要保证引用一定会被访问到,不会出现类等无法访问的问题。
java虚拟机字节码文件起始编码CAFEBABE(使用BinaryViewer软件)
(2)准备(Prepare)
为类变量(静态变量)分配内存并且设置该类变量的默认初始值,即零值。
这里不包含final修饰的static,因为final在编译的时候就会分配了,准备阶段会显示初始化;
这里不会为实例变量(new的对象)分配初始化,类变量会分配在方法区中,而实例变量是会随着对象一起分配到java堆中。
(3)解析(Resolve)
将常量池内的符号引用(符号引用就是一组符号来描述所引用的目标)转换为直接引用(直接引用就是直接指向目标的指针、相对偏移量或一个简洁定位到目标的句柄)的过程。事实上,解析操作往往会伴随着JVM在执行完初始化之后再执行。解析动作主要针对类或接口、字段、类方法、方法类型等。对应常量池中的CONSTANT_Class_info、CONSTANT_Fieldref_info、CONSTANT_Methodref_info等。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。