| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Java类加载器 -> 正文阅读 |
|
[Java知识库]Java类加载器 |
目录 0.知识储备——JVM内存分区&双亲委派机制?双亲委派——类加载器默认不直接对字节码文件进行加载,而是交给它的上一级类加载器,递归这个操作,如果上一级没有加载,它自己才回去加载。 这篇文章向我们介绍了双亲一词的由来: https://blog.csdn.net/VincentlVL/article/details/120516607 1.Java类加载机制1.1核心类加载器启动原理我们用Java语言编写的程序,经过javac编译[※注:javac所做的工作有词法分析、语法分析、语义分析]得到class文件,在JVM上运行的时候JVM会从软件层面为我们屏蔽不同操作系统在底层硬件和指令上的差别。但是在不同的系统上最终会得到不同的机器码,因此在选择JDK的时候要选择不同的版本,他们对应着不同的JVM实现。 类加载的含义:JVM将编译产生的class文件(一种二进制文件)加载到内存中,且伴随对数据进行校验、转换解析、初始化,最终成为被JVM直接使用的Java类型,这个过程叫Java的类记载机制。 类加载过程:1.类的加载加载是一个读取class文件,将其转化为某种静态数据结构存储在方法区内,并在堆中生成一个便于java.lang.class 类型的对象的特征。 ①类型的加载 在Java代码中,类型[※注:类型即编译产生的class文件]的加载、连接、初始化,都是在程序运行期间完成的。类型的来源丰富,包括数据库来源、本地源文件资源、下载的var包,jar包文件、网络数据来源等。 ②加载的工具 通过类加载器来进行加载。 ③载入位置 1.7方法区(1.8源空间)
2.类的连接?验证——验证当前的class文件是否是合法的 准备——为类的静态变量分配内存,并将其初始化为默认值 解析——把符号引用替换为直接引用 ? 3.初始化将真实的数据给到默认值去 ?1.2类加载的双亲委派机制(图片摘自百度文库) 2.类加载器的类型①启动类加载器(bootStrapClassLoader):C++编写,负责加载Java的核心类库 ②拓展类加载器(extClassLoader):?负责核心类以外的新功能扩展类的加载?? ?③应用类加载器(systemClassLoader):加载CLASSPATH环境变量所指定的jar包与类路径 ④自定义加载器(userClassLoader):自定义类加载器 3.自定义类加载器的实现1、如果不想打破双亲委派模型,那么只需要重写findClass方法即可 2、如果想打破双亲委派模型,那么就重写整个loadClass方法 ?CustomClassLoader即用户自定义的类加载器。创建流程: 1.创建一个私有的String类型的classPath变量。 2.创建一个带参数的构造器给classPath赋值。 3.继承classLoader类,重写findClass方法。 具体代码参考:自定义类加载器实现&源码分析 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 12:04:36- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |