JVM-10-类加载

news2024/12/26 23:51:40

Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。

在这里插入图片描述
一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)七个阶段,其中验证、准备、解析三个部分统称为连接(Linking)。

类加载的过程

加载

  • 通过一个类的全限定名来获取定义此类的二进制字节流。
  • 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。
  • 在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。

验证

验证是连接阶段的第一步,这一阶段的目的是确保Class文件的字节流中包含的信息符合《Java虚拟机规范》的全部约束要求,保证这些信息被当作代码运行后不会危害虚拟机自身的安全。

  • 文件格式验证
  • 元数据验证
  • 字节码验证
  • 符号引用验证

准备

准备阶段是正式为类中定义的变量(即静态变量,被static修饰的变量)分配内存并设置类变量初始值的阶段。

JDK 8及之后,类变量则会随着Class对象一起存放在Java堆中。

public static int value = 123;

变量value在准备阶段过后的初始值为0而不是123,因为这时尚未开始执行任何Java方法,而把value赋值为123的putstatic指令是程序被编译后,存放于类构造器()方法之中,所以把value赋值为123的动作要到类的初始化阶段才会被执行。

Java中所有基本数据类型的零值。

在这里插入图片描述
特殊情况

public static final int value = 123;

编译时Javac将会为value生成ConstantValue属性,在准备阶段虚拟机就会根据Con-stantValue的设置将value赋值为123。

解析

解析阶段是Java虚拟机将常量池内的符号引用替换为直接引用的过程。

  • 符号引用:符号引用与虚拟机实现的内存布局无关,引用的目标并不一定是已经加载到虚拟机内存当中的内容。
  • 直接引用(Direct References):直接引用是可以直接指向目标的指针、相对偏移量或者是一个能间接定位到目标的句柄。直接引用是和虚拟机实现的内存布局直接相关的,同一个符号引用在不同虚拟机实例上翻译出来的直接引用一般不会相同。如果有了直接引用,那引用的目标必定已经在虚拟机的内存中存在。

初始化

类的初始化阶段是类加载过程的最后一个步骤,初始化阶段就是执行类构造器()方法的过程。

()方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块(static{}块)中的语句合并产生的,编译器收集的顺序是由语句在源文件中出现的顺序决定的。

Java虚拟机必须保证一个类的()方法在多线程环境中被正确地加锁同步,如果多个线程同时去初始化一个类,那么只会有其中一个线程去执行这个类的()方法,其他线程都需要阻塞等待,直到活动线程执行完毕()方法。如果在一个类的()方法中有耗时很长的操作,那就可能造成多个进程阻塞。

类加载器

Java虚拟机设计团队有意把类加载阶段中的“通过一个类的全限定名来获取描述该类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需的类。实现这个动作的代码被称为“类加载器”(Class Loader)。
在这里插入图片描述
各种类加载器之间的层次关系被称为类加载器的“双亲委派模型(Parents Delegation Model)”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1321675.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

强大的电子书阅读器:OmniReader Pro for mac

🔍 OmniReader Pro 是一款专为 Mac 设计的强大阅读工具,它能够帮助你更高效地阅读和处理各种文本内容。无论是电子书、新闻文章、网页文本还是文件资料,OmniReader Pro 都能胜任! ✅ OmniReader Pro 提供了丰富的功能&#xff0c…

劲松中西医结合医院hpv诊疗中心建议:提高免疫力做好5件事

谭巍主任在近期的一次访谈中明确指出,免疫力是HPV最好的医生。他强调,提高免疫力是预防和治疗HPV的关键。通过科学的饮食和营养搭配,我们可以增强免疫力,有效抵抗病毒的侵袭。 首先,我们要明白什么是免疫力。免疫力是…

大创项目推荐 深度学习 opencv python 实现中国交通标志识别

文章目录 0 前言1 yolov5实现中国交通标志检测2.算法原理2.1 算法简介2.2网络架构2.3 关键代码 3 数据集处理3.1 VOC格式介绍3.2 将中国交通标志检测数据集CCTSDB数据转换成VOC数据格式3.3 手动标注数据集 4 模型训练5 实现效果5.1 视频效果 6 最后 0 前言 🔥 优质…

1.3 什么是接口?什么是接口测试?

上一小节我们认识了C/S和B/S架构,那在B/S架构中,我们测试最常接触的,就是接口。本课程的重点是接口自动化测试,那同学们真的了解什么是接口吗?首先,我们从通俗的角度来看什么是接口。在计算机中,接口是计算机系统中两个独立的部件进行信息交换的共享边界。这种交换可以发…

Mac managing Multiple Python Versions With pyenv 【 mac pyenv 管理多个python 版本 】

文章目录 1. 简介2. 安装2.1 brew 安装 pyenv2.2 脚本安装 3. pyenv 安装 Python4. 卸载 python5. 管理 python 1. 简介 Pyenv 是一个用于管理和切换多个 Python 版本的工具。它允许开发人员在同一台计算机上同时安装和使用多个不同的 Python 版本,而无需对系统进行…

基于SSM的婚恋网站的设计与实现论文

基于SSM的婚恋网站的设计与实现 摘要 随着信息互联网购物的飞速发展,一般企业都去创建属于自己的管理系统。本文介绍了基于SSM的婚恋网站的设计与实现的开发全过程。通过分析企业对于基于SSM的婚恋网站的设计与实现的需求,创建了一个计算机管理基于SSM…

力扣刷题记录(15)LeetCode:509、70、746

目录 509.斐波那契数 70.爬楼梯 746.使用最小花费爬楼梯 总结 ​​​​​​ 用一个数组来存储前两个数的值&#xff0c;然后根据前两个数的值来确定当前的值。 class Solution { public:int fib(int n) {if(n<2) return n;vector<int> v;v.push_back(0);v.push…

【深度学习目标检测】九、基于yolov5的路标识别(python,目标检测)

YOLOv5是目标检测领域一种非常优秀的模型&#xff0c;其具有以下几个优势&#xff1a; 1. 高精度&#xff1a;YOLOv5相比于其前身YOLOv4&#xff0c;在目标检测精度上有了显著的提升。YOLOv5使用了一系列的改进&#xff0c;如更深的网络结构、更多的特征层和更高分辨率的输入图…

大模型(LLM)+词槽(slot)构建动态场景多轮对话系统

构建动态场景多轮对话系统 引言 在人工智能和自然语言处理领域&#xff0c;聊天机器人的开发一直是一个热点话题。近年来&#xff0c;随着大型语言模型&#xff08;LLM&#xff09;的进步&#xff0c;构建能够理解和响应各种用户需求的聊天机器人变得更加可行和强大。本文将介…

python识别增强静脉清晰度 opencv-python图像处理案例

一.任务说明 用python实现静脉清晰度提升。 二.代码实现 import cv2 import numpy as npdef enhance_blood_vessels(image):# 调整图像对比度和亮度enhanced_image cv2.convertScaleAbs(image, alpha0.5, beta100)# 应用CLAHE&#xff08;对比度受限的自适应直方图均衡化&am…

万能在线答题考试小程序源码系统 网课必备 既能刷题又能考试 附带完整的搭建教程

在当前的数字化时代&#xff0c;移动应用程序已经成为人们日常生活的重要组成部分。其中&#xff0c;小程序因其无需下载、即用即走的特性&#xff0c;备受用户青睐。现如今&#xff0c;将在线答题考试功能集成到小程序中&#xff0c;可以极大地提高学习者的学习效率和兴趣。 …

历时两个月,我终于研究透外卖红包是怎么一回事

近几年&#xff0c;推广外卖红包爆火&#xff0c;各种推广外卖红包的公众号层出不穷。于是&#xff0c;我就在想外卖红包究竟是怎么一回事。就这样&#xff0c;我带着问题开始了关于外卖红包的研究。 在研究的过程中&#xff0c;我开始了解隐藏优惠券、cps等一系列相关的术语。…

rabbitmq界面主要参数分析

本篇主要分析rabbitmq broker界面参数 rabbitmq界面主要参数分析 1、connections User Name: user - 连接所使用的用户名。 State: running - 连接当前的状态&#xff0c;这里表明连接是活动的。 SSL/TLS: ○ - 表示这个连接没有使用SSL/TLS加密。 内部或受信任的网络中可能…

【RTOS学习】源码分析(通用队列 队列 队列集)

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《RTOS学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 前面本喵讲解了和任务相关的FreeRTOS源码&#xff0c;进行再来介绍一下用于任务间通信的几种数据结…

14.单调队列(滑动窗口最大值)、单调队列优化DP【灵神基础精讲】

单调队列&#xff08;滑动窗口最大值&#xff09; 从「维护单调性」的角度上来说&#xff0c;单调队列和单调栈是一样的&#xff0c;一个弹出队尾元素&#xff0c;另一个弹出栈顶元素。在单调栈的基础上&#xff0c;单调队列多了一个「移除队首」的操作&#xff0c;这类似滑动窗…

牛目标检测数据集VOC+YOLO格式4000张

牛是一种古老的哺乳动物&#xff0c;被人类驯化了数千年&#xff0c;成为了人类重要的家畜之一。它们是一种大型草食性动物&#xff0c;主要生活在草原、森林和农村地区。牛的体型较大&#xff0c;体长可达3米&#xff0c;体重可达1500千克。 牛是一种非常有用的动物&#xff0…

【TB作品】STM32 PWM之实现呼吸灯,STM32F103RCT6,晨启

文章目录 完整工程参考资料实验过程 实验任务&#xff1a; 1&#xff1a;实现PWM呼吸灯&#xff0c;定时器产生PWM&#xff0c;控制实验板上的LED灯亮灭&#xff1b; 2&#xff1a;通过任意两个按键切换PWM呼吸灯输出到两个不同的LED灯&#xff0c;实现亮灭效果&#xff1b; 3&…

提升数据中心网络效率:100G QSFP28 LR4光模块的优势分析

数字信息的急剧增长&#xff0c;对高速、高容量网络的需求愈发迫切&#xff0c;数据传输的速度和距离成为了一个关键的挑战。在这个背景下&#xff0c;100G QSFP28 LR4光模块作为一款性能卓越的光模块&#xff0c;为远距离高速传输提供了全新的解决方案。 该产品是专为符合100G…

【网络面试必问(8)】防火墙原理、正向代理、反向代理、缓存服务器、负载均衡和内容分发服务器

接上一篇&#xff1a;【网络面试必问&#xff08;7&#xff09;】聊聊集线器、交换机和路由器 作为一个程序员&#xff0c;其实很少去了解http请求消息在到达服务器之前&#xff0c;所经过的众多组件的&#xff0c;今天借着机会聊一聊标题中提到的正向代理、反向代理、缓存服务…

分段管理及段页管理

一、 分段 程序的逻辑关系被划分为不同的段&#xff0c;每个段有一个段名&#xff0c;并且每个段都从0开始编址。这些段在内存中分配&#xff0c;每个段占据连续的内存空间&#xff0c;但不同段之间可以不相邻。 这种分段管理有一些特点和优势&#xff1a; 逻辑划分&#xff1…