当前位置:网站首页>jvm-类加载系统
jvm-类加载系统
2022-08-09 10:30:00 【Tong++】
类加载系统
什么是类加载系统
字节码存储在硬盘上需要运行时,由类加载系统负责将类的信息加载到内存中,为每个类创建一个class对象,使用ClassLoader进行加载。
类加载过程
1.加载
将硬盘字节码文件读到内存中,生成此类的class对象,把硬盘上的结构转为内存结构
2.链接
验证:验证字节码格式,是否被修改
验证语法,例如类是否继承final的类
准备:在准备阶段为类中静态变量赋予初始值,在准备阶段不为静态的常量进行赋值
解析:将符号引用(文件中的逻辑引用)转为直接引用(内存中的实际地址)
3.初始化
对静态成员变量进行赋值
类什么时候初始化
(1)创建类的实例,也就是 new 一个对象
(2)访问某个类或接口的静态变量,或者对该静态变量赋值
(3)调用类的静态方法
(4)反射(Class.forName(“”))
(5)初始化一个类的子类(会首先初始化子类的父类)
类加载器
负责加载类的类
类加载器的分类
从jvm角度分:
1.启动类加载器(引导类加载器),这部分不是用java语言写的
2.其他类加载器,这部分是用java语言写的类加载器
从程序员角度分:
1.启动类加载器,负责加载java核心类
2.扩展类加载器,负责加载\jre\lib\ext目录下的类,包含应用程序类加载器
3.应用程序类加载器,负责加载自己写的程序中的类
类何时加载
主动使用
将类加载的整个过程完成
(1)通过new关键字被导致类的初始化
(2)访问类的静态变量,包括读取和更新
(3)访问类的静态方法
(4)对某个类进行反射操作,会导致类的初始化
(5)初始化子类会导致父类的的初始化
(6)执行该类的 main 函数
被动使用
不会加载初始化
(1)访问类中的静态常量
(2)将类作为类型,例如创建数组用类作为类型
Dog[] dogs = new Dog[10] ;
主动使用和被动使用的区别在于类是否会被初始化
双亲委派机制
为了确保类加载的正确性、安全性,在类加载时,采用双亲委派机制;
当需要加载程序中一个类时,会先让类加载器的父级去加载,直到最顶级的启动器类加载器;
如果父级找到了返回使用,如果依然没找到就委派给子级去加载,找到了就返回;
如果所有类加载器都没找到,报类找不到异常。
**优点:**安全,避免了自己写的类替换了系统中的类,避免类重复加载。
如何打破双亲委派机制
java中提供了一个ClassLoader类,定义哪些方法加载类。
边栏推荐
- Technology Sharing | How to simulate real usage scenarios?mock technology to help you
- unix环境编程 第十五章 15.10 POSIX信号量
- numpy的ndarray取数操作
- 使用pip成功安装某个库,但pycharm中找不到,此问题的解决方案
- tuple dictionary collection
- Solve the ali cloud oss - the original 】 【 exe double-click response can't open, to provide a solution
- 【 size_t is unsigned integer (1 > 10) - > 1.
- 数据存储:对dataframe类,使用to_csv()将中文数据写入csv文件
- The common problems in laptops, continuously updated
- Qt 国际化翻译
猜你喜欢
shell脚本实战(第2版)/人民邮电出版社 脚本1 在PATH中查找程序
[贴装专题] 贴装流程中涉及到的位置关系计算
Cpolar内网穿透的面板功能介绍
一天半的结果——xmms on E2
StratoVirt 中的虚拟网卡是如何实现的?
Solve the ali cloud oss - the original 】 【 exe double-click response can't open, to provide a solution
深度学习--循环神经网络(Recurrent Neural Network)
相伴成长,彼此成就 用友U9 cloud做好制造业数智化升级的同路人
编解码(seq2seq)+注意机制(attention) 详细讲解
MySQL索引的B+树到底有多高?
随机推荐
Redis + NodeJS 实现一个能处理海量数据的异步任务队列系统
unix环境编程 第十五章 15.7消息队列
实现下拉加载更多
Shell script combat (2nd edition) / People's Posts and Telecommunications Press Script 2 Validate input: letters and numbers only
function two
浅析JWT安全问题
Battery modeling, analysis and optimization (Matlab code implementation)
2022强网杯WP
Unix Environment Programming Chapter 15 15.7 Message Queuing
面试官:MySQL 中 update 更新,数据与原数据相同时会执行吗?大部分人答不上来!
3D打印了这个杜邦线理线神器,从此桌面再也不乱了
tensor.eq() tensor.item() tensor.argmax()
公里周日
学习NET-SNMP之一 ---------编译NET-SNMP程序。
MySQL和MyEclipse的数据库连接操作
day16_03集合
Throwing a question? The execution speed of the Count operation in the Mysql environment is very slow. You need to manually add an index to the primary key---MySql optimization 001
Dialogue with the DPO of a multinational consumer brand: How to start with data security compliance?See you on 8.11 Live!
程序员的专属浪漫——用3D Engine 5分钟实现烟花绽放效果
Restful WebServices 学习笔记