当前位置:网站首页>JVM类加载机制
JVM类加载机制
2022-06-27 05:57:00 【季风泯灭的季节】
一、类加载步骤
JVM采用的是懒加载机制,即只有类在被使用时才加载。类的加载主要可分为以下几步:
加载:即把类字节码文件加载到内存,在一步会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。
验证:校验字节码文件的准确性,每个字节码文件都有固定的格式,以此来校验字节码文件是否被损坏。
准备:给静态变量分配内存空间并赋与默认值。
解析:将符号引用替换为直接引用,该阶段会把一些静态方法(符号引用,比如 main()方法)替换为指向数据所在内存的指针或句柄等(直接引用),这是所谓的静态链接过程(类加载期间完成),动态链接是在程序运行期间完成的将符号引用替换为直接引用。
初始化:对类变量初始化赋值,并执行静态代码块。
二、类加载器
JVM的类加载主要有四类加载器来配合完成。
三、类加载机制
JVM的类加载机制采用的是双亲委派机制,当加载一个类时,如果使用自定义类加载器,则从自定义加载器查看该加载器是否加载过此类,如果没有则委托上层的应用程序类加载器去加载,在加载时,同样的检查当前类加载器是否加载过此类,如果没有则委托上层的扩展类加载器去加载。在加载时,同样的检查当前类加载器是否加载过此类,没有则委托上层的引导类加载器去加载,在加载时,同样的检查当前类加载器是否加载过此类,如果没有,则由引导类加载器去加载此类,如果在引导类加载器管辖的路径下没加载到此类,则有下层的扩展类程序类加载器去加载,如果在扩展类加载器管辖的路径下没加载到此类,则有下层的应用程序类加载器去加载;如果在应用程序类加载器管辖的路径下没加载到此类,则有下层的自定义类加载器去加载;再加载不到则抛出异常。可以总结成一句话:从下往上检查类是否被加载过,从上往下去加载类。
四、双亲委派机制的意义
五、全盘负责委托机制
六、Tomcat打破双亲委派机制
tomcat为什么不用双亲委派机制?
一个tomcat可能运行多个应用程序,而且这个多个应用程序引用了同一个类的不同版本,所以,从双亲委派机制保证类只加载一份的特点不符合tomcat的业务场景需求。
tomcat如何保证jps的热加载?
边栏推荐
猜你喜欢
Multithreading basic part part 1
[FPGA] design and implementation of frequency division and doubling based on FPGA
块级元素&行内元素
cpu-z中如何查看内存的频率和内存插槽的个数?
Nlp-d62-nlp competition d31 & question brushing D15
双位置继电器JDP-1440/DC110V
Free SSH and telnet client putty
思维的技术:如何破解工作生活中的两难冲突?
信息系统项目管理师---第七章 项目成本管理
汇编语言-王爽 第8章 数据处理的两个基本问题-笔记
随机推荐
力扣 179、最大数
程序猿学习抖音短视频制作
Win 10 如何打开环境变量窗口
js实现双向数据绑定
DAST black box vulnerability scanner part 6: operation (final)
NLP-D62-nlp比赛D31&刷题D15
leetcode299周赛记录
Luogu p2939 [usaco09feb]revamping trails G
汇编语言-王爽 第9章 转移指令的原理-笔记
QListWidgetItem上附加widget
信息系统项目管理师---第七章 项目成本管理
Opencv implements object tracking
[cocos creator 3.5.1] addition of coordinates
函数式 连续式
Wechat applet refreshes the current page
[collection] Introduction to basic knowledge of point cloud and functions of point cloud catalyst software
How to check the frequency of memory and the number of memory slots in CPU-Z?
网易云音乐params和encSecKey参数生成代码
openresty使用文档
Go log -uber open source library zap use