当前位置: 首页 > article >正文

JVM 的类加载机制和双亲委派机制

1.基本概念:

        在Java虚拟机(JVM)中,类加载机制是其核心组成部分之一,它负责将类(.class文件)加载到JVM的方法区内,并在需要时初始化这些类。本文将深入探讨JVM的类加载机制,特别是双亲委派模型的原理和应用。

2.类加载机制:

类加载机制包括加载、链接和初始化三个阶段:

(1).加载:通过类的全限定名获取定义此类的二进制字节流,并在内存中创建一个代表该类的java.lang.Class对象。
(2).链接:包括验证、准备和解析三个子步骤,确保加载的类信息符合JVM规范,为类的静态变量分配内存,并设置默认初始值,将常量池中的符号引用转换为直接引用。
验证(Verification):确保加载的类信息符合JVM规范,没有安全问题。
准备(Preparation):为类的静态变量分配内存,并设置默认初始值。
解析(Resolution):将常量池中的符号引用转换为直接引用。
(3).初始化:执行类的构造器方法<clinit>(),初始化类的静态变量和静态代码块。

3.双亲委派机制:

        双亲委派机制(Parent Delegation Model)是 Java 类加载器的一种工作模式。

        当一个类加载器去加载另一个类的时候,当前的类加载器会委托给其父类加载器查找是否加载过,如果加载过就直接返回,如果一直到最顶层加载器找不到,再由自顶向下进行加载。

4.类加载器的层次结构:

        (1).启动类加载器(Bootstrap ClassLoader):负责加载Java核心库,如rt.jar。
        (2).扩展类加载器(Extension ClassLoader):负责加载扩展库,如JAVA_HOME/lib/ext目录下的类库。
        (3).应用程序类加载器(Application ClassLoader):也称为系统类加载器,负责加载应用程序类路径上的类库。

        应用程序类加载器的父类为扩展类加载器,扩展类加载器的父类为启动类加载器。

5.双亲委派机制模型优点:

        (1).避免类被重复加载:确保一个类只被加载一次,由最先找到该类的加载器进行加载。

        (2).保护核心类库的安全:避免恶意代码替换JDK中核心类库,比如java.lang.String,确保核心类库的完整性和安全。

6.打破双亲委派机制:

        (1).重写loadclass方法,不再实现双亲委派机制。

        (2).JNDI.JDBC.JCE.JAXB和JBI等框架使用了SPI机制+线程上下文类架加载器。

        (3).OSGI实现了一整套类加载机制,允许同级类加载器之间互相协调。

7.总结:

        JVM 的类加载机制和双亲委派机制为 Java 提供了灵活和安全的类加载方式,确保应用程序的稳定和高效运行。通过掌握这些机制,开发者可以更好地理解和调试 Java 应用程序的运行过程。


http://www.kler.cn/a/292144.html

相关文章:

  • C函数如何返回参数lua使用
  • Excel使用-弹窗“此工作簿包含到一个或多个可能不安全的外部源的链接”的发生与处理
  • 压缩指令的使用
  • 【Linux】介绍和基础01
  • IQ Offset之工厂实例分析
  • Python 中常用的格式符号
  • 【Rust光年纪】极致性能体验:数据管道实现、虚拟化列表和网格布局美化完全攻略
  • 嵌入式day39
  • 828华为云征文|基于Flexus云服务器X实例的应用场景-定时给微信群中推送新闻简报
  • 【Python】企业排名、地域分布与词云分析可视化
  • 23种设计模式(四) —— 手写实现 Factory Method 模式 (将具体交给子类)
  • charles使用ssl证书抓包https请求失败解决方案
  • ffmpeg音视频开发从入门到精通——常用结构体介绍(一)
  • Node.js sqlite3:Statement对象详解
  • Ubuntu下pdf操作
  • 【免费分享】高斯过程回归(Gaussian process regression)原理详解及MATLAB代码实战
  • [rk3399 android11]关闭声卡
  • 【docker】docker 简介
  • Windows用户取消共享文件夹密码方法(Method for Windows Users to Cancel Shared Folder Password)
  • Redis 主从复制、切片集群
  • 前端框架有哪些?
  • python正则表达式大全
  • 21.新增管理员页面制作
  • 9月5日复盘日记
  • pytorch计算张量中三维向量的欧式距离
  • WWDG—窗口看门狗