JVM中类加载的过程

news/2024/10/22 13:43:07/

文章目录

  • 一、类加载是什么
  • 二、类加载过程
    • 1.加载
    • 2.验证
    • 3.准备
    • 4.解析
    • 5.初始化
  • 三、什么时候进行类加载
  • 四、双亲委派模型
    • 1.三大类加载器
    • 2.加载过程

一、类加载是什么

把.class文件加载到内存中,得到类对象的过程。

二、类加载过程

1.加载

找到.class文件,读取文件内容

2.验证

验证找到的文件是否为一个.class文件,.class文件有明确的数据格式

3.准备

给类对象分配空间。

注意这个空间是未初始化的空间,内存空间中的数据是全0的。

4.解析

字符串常量池中的符号引用替换为直接引用。(针对字符串常量进行初始化)

字符串常量池中的符号引用就是字符串常量,在.class文件中就已经存在了。这些字符串常量并不知道在内存中的实际地址,只知道彼此之间的相对位置。
在进行初始化后,每个字符串常量拥有了在内存中的实际地址(直接引用),但是彼此的相对位置并没有发生改变。符号引用替换成了直接引用。

举个生活中的例子,假设班级一起组织去看电影,老师会安排学生进行排队,小宇和小顾自然的排在了一起(符号引用)。在入场前小宇和小顾一直保持在一排,到了电影院后,分座位号(直接引用)时,自然也就是紧挨着了。(相对位置不变)。

5.初始化

针对类对象进行初始化

初始化静态成员、执行静态代码块,如果有父类还需要加载父类。

三、什么时候进行类加载

类加载非必要时不加载。
只有在下列三种情况时才会加载。
1.创建了类的实例;
2.使用了类的静态方法;
3.使用子类,触发了父类的加载。

四、双亲委派模型

实际是‘单亲’。

1.三大类加载器

  • BootStrap ClassLoader 加载java标准库中的类
  • Extension ClassLoader 加载java非标准库中的雷(但是是Sun/Oracle扩展的库的类)
  • Application ClassLoader 加载自己创建的类

2.加载过程

在这里插入图片描述

祝大家顺顺利利健健康康天天开心,下次见!!!


http://www.ppmy.cn/news/863773.html

相关文章

Python Process_Manager

import subprocessclass Process_Manager:def __init__(self, process_name, log_name):self.process_name process_nameself.log_name log_namedef check(self):# 执行命令&#xff0c;获取进程 IDpids self._get_pids()if len(pids) < 2:print(f"进程 {self.proce…

01golang学习笔记-指针

指针go 案例代码解释 案例代码 package mainimport "fmt"func main() {var num int 10var ptr *int // 定义一个指针变量ptr &num // 将num的地址赋值给ptrfmt.Println("num的值:", num)fmt.Println("num的地址:", &num)fmt.Println(…

RTX3080+cuda 11.0

使用最新的卡RTX3080&#xff0c;需要安装11.3 cudatoolkit install with the following command&#xff1a; conda install pytorch torchvision cudatoolkit11.3 -c pytorch

ubuntu安装1080ti nvidia驱动+cuda8.0+TensorFlow

主要参考官方文档 CUDA及cudnn安装参考http://blog.csdn.net/smf0504/article/details/69666996博客 系统Ubuntu 14.04 显卡为1080ti 步骤&#xff1a; 1.首先安装CUDA8.0 首先准备安装包&#xff0c;由于deb会存在各种问题&#xff0c;建议采用run模式安装 这里需要两个文…

算法刷题Day 36 无重叠区间+划分字母区间+合并区间

Day 36 贪心算法 435. 无重叠区间 差点就自己写出来了 class Solution {static bool cmp(const vector<int> &a, const vector<int> &b){if (a[0] b[0]) return a[1] < b[1];return a[0] < b[0];}public:int eraseOverlapIntervals(vector<ve…

揭秘GPT-4;Adobe Firefly AI 扩大测试规模

&#x1f989; AI新闻 &#x1f680; Adobe Firefly AI 扩大测试规模&#xff0c;支持100多种语言的输入 摘要&#xff1a;Adobe宣布扩大测试规模&#xff0c;Adobe Firefly AI现在支持100多种语言的 prompts 输入。网页测试版Firefly已经扩充了罗马尼亚语等多种语言&#xf…

算法安全自评估制度建设风险研判之算法滥用与算法漏洞

在我们的现代社会中&#xff0c;算法无处不在&#xff0c;它们以一种我们难以想象的方式影响着我们的生活。从我们的社交媒体喜好&#xff0c;到搜索引擎结果&#xff0c;再到可能的就业机会&#xff0c;无一不在算法的调控之中。然而&#xff0c;随着算法的广泛使用&#xff0…

数据备份、还原、视图、索引 操作练习

目录 备份与还原&#xff1a; 题目要求&#xff1a; 索引和视图 题目要求&#xff1a; 备份与还原&#xff1a; 在数据库booksDB中创建表books、authorbook、authorbook&#xff1a; 题目要求&#xff1a; 1、mysqldump -uroot -pRyh201314% booksDB > /backup/db/boo…