公众号后端框架,深圳搜索seo优化排名,北京 手机网站建设,淘客app网站是怎么做的文章目录 前言一、类加载机制二、类加载器三、双亲委派模型总结 前言 #x1f4d5;各位读者好, 我是小陈, 这是我的个人主页 #x1f4d7;小陈还在持续努力学习编程, 努力通过博客输出所学知识 #x1f4d8;如果本篇对你有帮助, 烦请点赞关注支持一波, 感激不尽 #x1f4d… 文章目录 前言一、类加载机制二、类加载器三、双亲委派模型总结 前言 各位读者好, 我是小陈, 这是我的个人主页 小陈还在持续努力学习编程, 努力通过博客输出所学知识 如果本篇对你有帮助, 烦请点赞关注支持一波, 感激不尽 希望我的专栏能够帮助到你: JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等 Java数据结构: 顺序表, 链表, 堆, 二叉树, 二叉搜索树, 哈希表等 JavaEE初阶: 多线程, 网络编程, TCP/IP协议, HTTP协议, Tomcat, Servlet, Linux, JVM等(正在持续更新) 提示是正在努力进步的小菜鸟一只如有大佬发现文章欠佳之处欢迎批评指点~ 废话不多说直接上干货
一、类加载机制
类加载是指把 .class 文件加载到内存, 得到类对象的过程 类加载被分为 5 个步骤
1, 加载(Loading): 查找并加载这个类的二进制文件(.class文件), 并读取文件内容2, 验证(Verification): 验证这个二进制文件是否符合《Java虚拟机规范》, 是否有正确的文件格式、是否有正确的访问权限等 这一阶段的目的是确保 Class 文件的字节 流中包含的信息符合《Java虚拟机规范》的全部约束要求保证这些信 息被当作代码运行后不会危害虚拟机自身的安全3, 准备(Preparation): 给类对象(静态变量)分配内存空间, 此时的静态变量都是默认值4, 解析(Preparation): 将常量池内的符号引用替换为直接引用的过程, 也就是初始化常量的过程 这些常量在.class文件中存在时, 只知道相互之间的相对位置, 并不知道在内存中的实际位置, 这时候的常量就是“符号引用”, 加载到内存中后, 这些常量有了自己的内存地址(相对位置不变), 此时的常量就是直接引用 5, 初始化(Initialization): 真正开始执行类中编写的 Java 程序初始化的代码, 将主导权移交给应用程序, 初始化阶段就是执行类构造器方法的过程(初始化静态成员, 执行静态代码块, 如果有父类就去加载父类)
什么时候进行类加载 并非是JVM一致性, 就把程序中所有的类都加载, 而是非必要不加载, 类似于懒汉模式, 以下三种情况会触发类加载 :
1, 创建了这个类的实例2, 调用这个类的静态方法3, 创建了子类的实例 / 调用了子类的静态方法, 会加载当前(父)类 二、类加载器
类加载器Class Loader是 Java 虚拟机JVM的重要组成部分, 负责将字节码文件加载到内存中并转换为可执行的类 类加载器分为三种 :
启动类加载器Bootstrap Class Loader它是 JVM 的内部组件负责加载 Java 核心类库如java.lang 和其他被系统类加载器所需要的类。启动类加载器是由 JVM 实现提供的通常使用本地代码来实现扩展类加载器Extension Class Loader负责加载 Java 的扩展类库如 java.util、java.net等系统类加载器System Class Loader负责加程序员自己写的类以及第三方库中的类 其实还有第四种: 自定义类加载器, 此处就不讨论了 三、双亲委派模型
双亲委派模型是类加载机制中第一步: 查找 .class 文件的过程
具体来说: 如果一个类加载器收到了类加载的请求它首先不会自己去尝试加载这个类而是把这个请求委派给父类加载器去完成每一个层次的类加载器都是如此因此所有的加载请求最终都应该传送到最顶层的启动类加载器中只有当父加载器反馈自己无法完成这个加载请求它的搜索范围中没有找到所需的类时子加载器才会尝试自己去完成加载
双亲委派模型的优点
避免重复加载类比如 A 类和 B 类都有一个父类 C 类那么当 A 启动时就会将 C 类加载起来那么在 B 类进行加载时就不需要在重复加载 C 类了安全性使用双亲委派模型也可以保证了 Java 的核心 API 不被篡改如果没有使用双亲委派模型而是每个类加载器加载自己的话就会出现一些问题比如我们编写一个称为 java.lang.Object 类的话那么程序运行的时候系统就会出现多个不同的 Object 类而有些 Object 类又是用户自己提供的因此安全性就不能得到保证了 总结
本篇主要介绍了JVM 中的类加载机制, 分为加载, 验证, 准备, 解析, 初始化五步
在第一步 “加载” 中, 涉及到了 “双亲委派模型” , 而这又建立在三层类加载器的基础上
如果本篇对你有帮助请点赞收藏支持一下小手一抖就是对作者莫大的鼓励啦~ 上山总比下山辛苦 下篇文章见