千家信息网

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

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇内容主要讲解"JVM类的加载过程和双亲委派模型案例分享",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"JVM类的加载过程和双亲委派模型案例分享"吧!类加
千家信息网最后更新 2026年10月31日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安全错误 数据库的锁怎样保障安全 远信互联网科技 汇久创客互联网科技 互联网科技中介 重庆互联网医院沙龙医盟信息科技 黑科技闪耀互联网之光 互联网5g黑科技有哪些 青海科技产业互联网发展 广州新华互联网科技学校电竞方面 西安小鹰速贷互联网科技有限公司 佛山市拉法互联网科技有限公司 明优互联网科技有限公司 互联网科技公司营业执照怎么办理 山东子淼互联网科技有限公司 上海互联网科技公司ppt 西安有哪些互联网高科技企业 互联网科技企业商标注意事项 艺电能源互联网科技有限公司招聘 保山互联网科技靠谱吗 悟空问答互联网科技 互联网科技大佬云集 咖啡 深圳互联网科技公司 合肥互联网科技公司 齐家互联网科技 温州喔噻互联网科技有限公司 昭通云南众福互联网科技有限公司 深圳市优智互联网科技有限公司 黑科技 体验场景 互联网大会 马化腾互联网科技教学 互联网科技创业有什么好项目
0