网站开发免费课程建设项目竣工环保验收公示网站
网站开发免费课程,建设项目竣工环保验收公示网站,新河镇网站制作,电脑宽带网站一:背景
类加载机制是在我们的真个java的运行阶段中的其中一个阶段。
二:什么是快乐星球(类加载机制)
我们编写的 Java 文件都是以.java 为后缀的文件#xff0c;编译器会将我们编写的.java 的文件编译成.class 文件#xff0c;简单来说类加载机制就是jvm从文件系统将一系…一:背景
类加载机制是在我们的真个java的运行阶段中的其中一个阶段。
二:什么是快乐星球(类加载机制)
我们编写的 Java 文件都是以.java 为后缀的文件编译器会将我们编写的.java 的文件编译成.class 文件简单来说类加载机制就是jvm从文件系统将一系列的 class 文件z转化为二进制流加载 JVM 内存中并生成一个该类的Class对象,为后续程序运行提供资源的动作。
三:类加载的流程
1:整体的流程图 2:各个阶段的解析
(1):加载
a:加载的类的字节码文件以及二进制文件的来源
通过一个类的完整路径查找此类字节码文件class 文件即二进制文件。将二进制文件的静态存储结构转化为方法区的运行时数据结构并利用二进制流文件创建一个Class对象存储在 Java 堆中用于对方法区的数据结构引用的入口 class 文件的来源有一点需要注意的是类加载机制不仅可以从文件系统读取 class 文件也可以通过网络获取其他 jar 包或者其他程序生成如 JSP 应用。
b:类加载器 类加载器讲到类加载不得不讲到类加载的顺序和类加载器。Java 中大概有四种类加载器分别是启动类加载器Bootstrap ClassLoader扩展类加载器Extension ClassLoader系统类加载器System ClassLoader自定义类加载器Custom ClassLoader依次属于继承关系注意这里的继承不是 Java 类里面的 extends 启动类加载器Bootstrap ClassLoader主要负责加载存放在Java_Home/jre/lib下或被-Xbootclasspath参数指定的路径下的并且能被虚拟机识别的类库如rt.jar所有的java.*开头的类均被Bootstrap ClassLoader加载启动类加载器是无法被Java程序直接引用的。 扩展类加载器Extension ClassLoader主要负责加载器由sun.misc.Launcher$ExtClassLoader实现它负责加载Java_Home/jre/lib/ext目录中或者由java.ext.dirs系统变量指定的路径中的所有类库如javax.*开头的类开发者可以直接使用扩展类加载器。 系统类加载器System ClassLoader主要负责加载器由sun.misc.Launcher$AppClassLoader来实现它负责加载用户类路径ClassPath所指定的类开发者可以直接使用该类加载器如果应用程序中没有自定义过自己的类加载器一般情况下这个就是程序中默认的类加载器。 自定义类加载器Custom ClassLoader自己开发的类加载器
c:双亲委派
如果一个类加载器需要加载类那么首先它会把这个类加载请求委派给父类加载器去完成如果父类还有父类则接着委托每一层都是如此。 一直递归到顶层当父加载器无法完成这个请求时子类才会尝试去加载。 (2):验证
验证的过程只要是保证 class 文件的安全性和正确性确保加载了该 class 文件不会导致 JVM 出现任何异常不会危害JVM 的自身安全。验证包括对文件格式的验证元数据和字节码的验证。
(3):准备
准备阶段是为类变量进行内存分配和初始化零值的过程。注意这时候分配的是类变量的内存这些内存会在方法区中分配。此时不会分配实例变量的内存因为实例变量是在实例化对象时一起创建在Java 堆中的。而且此时类变量是赋值为零值即 int 类型的初值为 0引用类型初值为 null而不是代码中显示赋值的数值。
(4):解析
将常量池的符号引用转化成直接引用。符号引用可以理解为只是个替代的标签比如你此时要做一个计划暂时还没有人选你设定了个 A 去做这个事。然后等计划真的要落地的时候肯定要找到确定的人选到时候就是小明去做一件事。 解析就是把 A(符号引用) 替换成小明(直接引用)。符号引用就是一个字面量没有什么实质性的意义只是一个代表。直接引用指的是一个真实引用在内存中可以通过这个引用查找到目标。
(5):初始化
初始化的阶段是类加载的最后一步这个阶段主要是执行 java 代码进行相关初始化的动作;这时候就执行一些静态代码块为静态变量赋值这里的赋值才是代码里面的赋值准备阶段只是设置初始值占个坑。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/90350.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!