千家信息网

JVM类的加载过程和双亲委派模型案例分享

发表于:2025-12-06 作者:千家信息网编辑
千家信息网最后更新 2025年12月06日,本篇内容主要讲解"JVM类的加载过程和双亲委派模型案例分享",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"JVM类的加载过程和双亲委派模型案例分享"吧!类加
千家信息网最后更新 2025年12月06日JVM类的加载过程和双亲委派模型案例分享

本篇内容主要讲解"JVM类的加载过程和双亲委派模型案例分享",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"JVM类的加载过程和双亲委派模型案例分享"吧!

类加载过程

类加载过程为 JVM 将类描述数据从 .class 文件中加载到内存,并对数据进行解析和初始化,最终形成被JVM直接使用的 Java 类型。包含:

•加载:获取该类的二进制字节流,将字节流代表的静态存储结构转化为方法区的运行时数据结构,并在内存生成代表该类的 java.lang.Object 对象作为方法区该类的访问入口•验证:确保 Class 文件的字节流中包含的信息符号当前虚拟机的要求(文件格式验证、元数据验证、字节码验证、符号引用验证)•准备:为类变量分配内存并设置类变量初始值•解析:将常量池内的符号引用替换为直接引用•初始化:执行类构造器 () 方法

类加载器

类加载过程中的加载操作由类加载去完成。类加载器分为:

启动类加载器/Bootstrap ClassLoader:负责加载 JAVA_HOME/lib 目录中的所有类,或者加载由选项 -Xbootcalsspath 指定的路径下的类;•扩展类加载器/ExtClasLoader:负责加载 JAVA_HOME/lib/ext 目录中的所有类型,或者由参数-Xbootclasspath指定路径中的所有类型;•应用程序类加载器/AppClassLoader:负责加载用户类路径 ClassPath 下的所有类型•自定义加载器:所有继承抽象类 java.lang.ClassLoader 的类加载器

双亲委派模型

双亲委派过程:当一个类加载器收到类加载任务时,立即将任务委派给它的父类加载器去执行,直至委派给最顶层的启动类加载器为止。如果父类加载器无法加载委派给它的类时,将类加载任务退回给它的下一级加载器去执行。

双亲委派模型最大的好处就是让Java类同其类加载器一起具备了一种带优先级的层次关系。举个例子来说明下:比如我们要加载顶层的Java类--java.lang.Object类,无论我们用哪个类加载器去加载Object类,这个加载请求最终都会委托给启动类加载器(Bootstrap ClassLoader),这样就保证了所有加载器加载的Object类都是同一个类。如果没有双亲委派模型,就会出现 Wupx::Object 和 Huyx::Object 这样两个不同的Object类。

双亲委派模型案例

java.lang.ClassLoader 的 loadClass() 方法

protected Class loadClass(String name, boolean resolve)        throws ClassNotFoundException    {        synchronized (getClassLoadingLock(name)) {            // First, check if the class has already been loaded            Class c = findLoadedClass(name);            if (c == null) {                long t0 = System.nanoTime();                try {                    if (parent != null) {                        c = parent.loadClass(name, false);                    } else {                        c = findBootstrapClassOrNull(name);                    }                } catch (ClassNotFoundException e) {                    // ClassNotFoundException thrown if class not found                    // from the non-null parent class loader                }                if (c == null) {                    // If still not found, then invoke findClass in order                    // to find the class.                    long t1 = System.nanoTime();                    c = findClass(name);                    // this is the defining class loader; record the stats                    sun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);                    sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);                    sun.misc.PerfCounter.getFindClasses().increment();                }            }            if (resolve) {                resolveClass(c);            }            return c;        }    }

到此,相信大家对"JVM类的加载过程和双亲委派模型案例分享"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

委派 双亲 模型 过程 方法 验证 案例 数据 类型 任务 文件 符号 路径 代表 内存 内容 变量 目录 结构 顶层 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 普及网络安全防范技巧 2021网民网络安全调查问卷 我的世界服务器命令方块怎么使用 软件开发服务端做什么的 国家网络安全教育主题班会手抄报 惠州西餐智慧餐饮软件开发 网络安全与信息安全 普通打印机加服务器可以吗 服务器系统检测工具 第五届网络安全宣传周手抄报 梦幻西游原来的服务器去哪了 学生数据库需求说明书 手机软件开发进度计划 数据库暂停了怎么恢复 北京弈名网络技术 数据库求职网站逻辑结构设计 pb8.0怎么连接数据库 徐汇区即时网络技术造型设计 西藏党性体检软件开发系统 成都交友软件开发费用是多少 新加坡与加拿大网络安全 简述软件开发的必要性 网络安全从我做起绘画作品 服务器分区后无法启动 sql数据库打开excel 军团要塞2服务器有英文吗 c 软件开发工具 通讯网络技术发展史 集团公司 网络技术服务合同 网络安全宣传视频情景剧
0