jvm-类加载子系统
1.内存结构概述
类加载子系统负责从文件系统或网络中加载class文件,class文件在文件开头有特定的文件标识
ClassLoader只负责class文件的加载,至于它是否运行,则由Execution Engine决定
加载的类信息存放于一块称为方法区的内存空间,除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串常量和数字常量
2.类加载器与类的加载过程
加载:
1.通过一个类的全限定名获取定义此类的二进制字节流
2.将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
3.在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口
链接:验证、准备、解析
验证
主要包括四种验证:文件格式验证,元数据验证,字节码验证,符号引用验证
准备
为类变量分配内存并设置该类变量的默认初始值,即零值
这里不包含final修饰的static,因为final在编译的时候就会分配了,准备阶段会显示初始化
这里不会为实例变量分配初始化,类变量会分配在方法区,而实例变量是会随着对象一起分配到java堆中
解析
将常量池内的符号引用转换为直接引用的过程
符号引用就是一组符号来描述所引用的目标。
直接引用就是直接指向目标的指针、相对偏移量或一个间接定位到目标的句柄
初始化
初始化阶段就是执行类构造器方法<clinit>()的过程,此方法不需要定义,是javac编译器自动收集类中的所有类变量的赋值动作和静态代码块中的语句合并而来
构造器方法中指令按语句在源文件中出现的顺序执行
<cliinit>()不同于类的构造器
若该类具有父类,jvm会保证子类的<cliinit()执行前,父类的<cliinit>()已经执行完毕
虚拟机必须保证一个类的<cliinit>()方法在多线程下被同步加锁
3.类加载器分类
jvm支持两种类型的类加载器,分别为引导类加载器(BootStrap ClassLoader)和自定义类加载器(User-Defined ClassLoader)
从概念上来讲,自定义类加载一般指的是程序中由开发人员自定义的一类类加载器,但是java虚拟机规范却没有这么定义,而是将派生于抽象类ClassLoader的类加载器都划分为自定义类加载器
启动类加载器
这个类加载使用c/c++语言实现的,嵌套在jvm内部
用来加载java的核心库(JAVA_HOME/jre/lib/rt.jar、resources.jar、sun.boot.class.path路径下的内容),用于提供JVM自身需要的类
并不继承自java.lang.ClassLoader,没有父加载器
加载扩展类和应用程序类加载器,并指定为他们的父类加载器
出于安全考虑,Bootstrap启动类加载器只加载包名为java,javax,sun等开头的类
扩展类加载器
java语言编写,由sun.misc.Launcher$ExtClassLoader实现。
派生于ClassLoader类
父类加载器为启动类加载器
从java.ext.dirs系统属性所指定的目录中加载类库,或从jdk的安装目录jre/lib/ext子目录(扩展目录)下加载类库。如果用户创建的jar放在此目录下,也会自动由扩展类加载器加载
应用程序类加载器
java语言编写,由sun.misc.Launcher$AppClassLoader实现
派生于ClassLoader类
父类加载器为扩展类加载器
负责加载环境变量classpath或系统属性java.class.path指定路径下的类库
该类加载器中默认的类加载器,一般来说,java应用的类都是由它来加载完成
为什么要自定义类加载器
隔离加载类
修改类加载方式
扩展加载源
防止源码泄露
4.ClassLoader的使用说明
5.双亲委派机制
工作原理
1.如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行;
2.如果父类加载器还存在其父类加载器,则进一步向上委托
3.如果父类加载器可以完成类加载任务,就成功返回,若父类加载器无法完成加载任务,子类加载器尝试自己去加载,这就是双亲委派机制
jvm中表示两个class对象是否为同一个类存在两个必要条件
1.类的完整类名必须一致,包括包名
2.加载这个类的ClassLoader(指ClassLoader实例对象)必须相同
类加载器的引用
jvm必须知道一个类型是由启动类加载器加载的还是由用户类加载器加载的。如果一个类型是由用户类加载器加载的,那jvm会将这个类加载器的一个引用作为类型信息的一部分保存到方法区中,当解析一个类型到另一个类型引用的时候,jvm要保证这两个类型的类加载器是相同的
类的主动使用和被动使用
类的被动使用不会导致类的初始化
相关文章:
jvm-类加载子系统
1.内存结构概述 类加载子系统负责从文件系统或网络中加载class文件,class文件在文件开头有特定的文件标识 ClassLoader只负责class文件的加载,至于它是否运行,则由Execution Engine决定 加载的类信息存放于一块称为方法区的内存空间ÿ…...
【实例分割】(一)Mask R-CNN详细介绍带python代码
目录 1.🍀🍀实例分割定义 2.🍀🍀Mask R-CNN 3.🍀🍀经典的实例分割算法 4.🍀🍀Mask R-CNN python代码 整理不易,欢迎一键三连!!!…...
面试官问我Redis怎么测,我一脸懵逼!
有些测试朋友来问我,redis要怎么测试?首先我们需要知道,redis是什么?它能做什么? redis是一个key-value类型的高速存储数据库。 redis常被用做:缓存、队列、发布订阅等。 所以,“redis要怎么测试…...
【Spring Boot】四种核心类的依赖关系:实体类、数据处理类、业务处理类、控制器类
//1.配置项目环境,创建Spring Boot项目。 //2.数据库设置,配置数据库。 //3.创建实体类,映射到数据库。 //4.创建数据处理层类,Repository //5.创建业务处理类,Service类 //6.创建控制器类,Controller类 Ar…...
opencv 进阶15-检测DoG特征并提取SIFT描述符cv2.SIFT_create()
前面我们已经了解了Harris函数来进行角点检测,因为角点的特性,这些角点在图像旋转的时候也可以被检测到。但是,如果我们放大或缩小图像时,就可能会丢失图像的某些部分,甚至有可能增加角点的质量。这种损失的现象需要一…...
ES5 的构造函数和 ES6 的类有什么区别
文章目录 语法不同方法定义方式不同继承方式不同类内部的this指向不同静态成员定义方式不同访问器属性类的类型检查 在JavaScript中,类和构造函数都被用来创建对象,接下来会从以下几点说说两者的区别: 语法不同 构造函数使用函数来定义类使用…...
AUTOSAR配置与实践(配置篇) 如何条件控制PDU外发
AUTOSAR配置与实践(配置篇)如何条件控制PDU外发 一、需求1.1 需求简要分析1.2 需求进一步分析二、流程实现和具体配置一、需求 需要针对特定的PDU(外发)进行条件控制,这里要通过不同配置字进行PDU是否外发的控制 1.1 需求简要分析 正常PDU分组时分为两组,接收报文组和…...
2023年湖北中级工程师职称申报专业有哪些?甘建二告诉你
中级职称职称申报专业:环境工程、 土木建筑、土建结构、土建监理、土木工程、岩石工程、岩土、土岩方、风景园林、园艺、园林、园林建筑、园林工程、园林绿化、古建筑园林、工民建、工民建安装、建筑、建筑管理、建筑工程、建筑工程管理、建筑施工、建筑设计、建筑装…...
记录:ubuntu20.04+ORB_SLAM2_with_pointcloud_map+ROS noetic
由于相机实时在线运行需要ROS,但Ubuntu22.04只支持ROS2,于是重装Ubuntu20.04。上一篇文章跑通的是官方版本的ORB_SLAM2,不支持点云显示。高翔修改版本支持RGB-D相机的点云显示功能。 高翔修改版本ORB_SLAM2:https://github.com/ga…...
文心问数Sugar Bot :大模型+BI,多轮会话自动生成可视化图表与数据结论
Sugar BI 的文心问数功能是基于大语言模型实现的,支持您使用自然语言,通过多轮会话的方式,获取实时数据的图表展现,也可以自动为您总结与图表相关的业务结论。 文心问数功能邀测中,欢迎CSDN的用户前来报名:…...
21、WEB漏洞-文件上传之后端黑白名单绕过
目录 前言验证/绕过 前言 关于文件上传的漏洞,目前在网上的常见验证是验证三个方面: 后缀名,文件类型,文件头,其中这个文件头是属于文件内容的一个验证 后缀名:黑名单,白名单 文件类型…...
windows的django项目部署到linux的docker上
编辑dockerfile文件,可以自行寻找相关教程 创建镜像 docker bulid -t imagename:tag .查看镜像 docker images 如果想自己先试一下,那就需要运行容器 docker run -it -d -p 8000:8000 --name volume_name imagename:tag 查看容器 docker ps -a 进…...
【力扣】70. 爬楼梯 <动态规划>
【力扣】70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. …...
数据结构(3)
线性表是多个具有相同特征的数据的有限序列。 前驱元素:A在B前面,称A为B的前驱元素。 后继元素:B在A后面,称B为A的后继元素。 线性表特征: 1.一个元素没有前驱元素,就是头结点; 2.最后一个…...
深入浅出Pytorch函数——torch.nn.init.xavier_uniform_
分类目录:《深入浅出Pytorch函数》总目录 相关文章: 深入浅出Pytorch函数——torch.nn.init.calculate_gain 深入浅出Pytorch函数——torch.nn.init.uniform_ 深入浅出Pytorch函数——torch.nn.init.normal_ 深入浅出Pytorch函数——torch.nn.init.c…...
优橙内推安徽专场——5G网络优化(中高级)工程师
可加入就业QQ群:801549240 联系老师内推简历投递邮箱:hrictyc.com 内推公司1:浙江省邮电工程建设有限公司 内推公司2:北京宜通华瑞科技有限公司 内推公司3:浙江明讯网络技术有限公司 浙江省邮电工程建设有限公司 …...
2023年计算机设计大赛国三 数据可视化 (源码可分享)
2023年暑假参加了全国大学生计算机设计大赛,并获得了国家三等奖(国赛答辩出了点小插曲)。在此分享和记录本次比赛的经验。 目录 一、作品简介二、作品效果图三、设计思路四、项目特色 一、作品简介 本项目实现对农产品近期发展、电商销售、灾…...
工业生产全面感知!工业感知云来了
面向工业企业数字化转型需求,天翼物联基于感知云平台创新能力和5G工业物联数采能力,为客户提供工业感知云服务,包括工业泛协议接入、感知云工业超轻数采平台、工业感知数据治理、工业数据看板四大服务,构建工业感知神经系统新型数…...
Lnton羚通关于Optimization在【PyTorch】中的基础知识
OPTIMIZING MODEL PARAMETERS (模型参数优化) 现在我们有了模型和数据,是时候通过优化数据上的参数来训练了,验证和测试我们的模型。训练一个模型是一个迭代的过程,在每次迭代中,模型会对输出进行猜测&…...
冒泡排序算法
//version 1 void bubblesort(vector<int>& nums){int n=nums.size();for(int i...
无人机航管应答机 ping200XR
产品概述 ping200XR是一个完整的系统,旨在满足航管应答器和自动相关监视广播(ADS-B)的要求,在管制空域操作无人航空系统(UAS)。该系统完全可配置为模式A,模式C,模式S转发器和扩展ADS-B发射机的任何组合。ping200XR包括一个精度超…...
oracle归档日志满了导致启动不起来解决
oracle启动不起来解决 原因:闪回归档区的空间满了 [oraclepre-oracle ~]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.4.0 Production on Tue Aug 22 14:48:50 2023Copyright (c) 1982, 2013, Oracle. All rights reserved.Connected to: Oracle Database 11g…...
高等数学:线性代数-第二章
文章目录 第2章 矩阵及其运算2.1 线性方程组和矩阵2.2 矩阵的运算2.3 逆矩阵2.4 Cramer法则 第2章 矩阵及其运算 2.1 线性方程组和矩阵 n \bm{n} n 元线性方程组 设有 n 个未知数 m 个方程的线性方程组 { a 11 x 1 a 12 x 2 ⋯ a 1 n x n b 1 a 21 x 1 a 22 x 2 ⋯ a …...
星戈瑞分析FITC-PEG-Alkyne的荧光特性和光谱特性
欢迎来到星戈瑞荧光stargraydye!小编带您盘点: FITC-PEG-Alkyne的荧光特性和光谱特性是对其荧光性能进行分析的方面。以下是FITC-PEG-Alkyne的一些常见荧光特性和光谱特性: **1. 荧光激发波长:**FITC-PEG-Alkyne的荧光激发波长通…...
VB.NET调用VB6 Activex EXE实现PowerBasic和FreeBasic的标准DLL调用
VB6写的ActiveX EXE公共对象是外置进程,因此,尽管它是x86 32位的进程,但可以集成到 VB.NET的x64和x32程序中使用。 VS2022的VB.NET程序,调用ActiveX DLL对象我在上篇笔记中写了 VB.NET通过VB6 ActiveX DLL调用PowerBasic及FreeB…...
深入了解Unity的Physics类:一份详细的技术指南(七)(下篇)
接着上一篇深入了解Unity的Physics类(上篇),我们继续把Physics类剩余的属性和方法进行讲解 碰撞检测和忽略: (这些方法和属性涉及查询和处理物体之间的碰撞) Physics.CheckBox: 检查给定位置的盒子是否与任何碰撞器接触或者位于任何碰撞器内部。 Physics.CheckCapsu…...
C++入门:引用是什么
目录 1.引用的概念 2.引用的特征 3.常引用 4.引用使用场景 5.传值,传引用效率比较 6.引用与指针的区别 1.引用的概念 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空 间,它和它引用…...
2023年人工智能与自动化控制国际学术会议(AIAC 2023)
2023年人工智能与自动化控制国际学术会议(AIAC 2023) The 2023 International Conference on Artificial Intelligence and Automation Control 2023年人工智能与自动化控制国际学术会议(AIAC 2023)将于2023年10月27-29日在中…...
分布式核心知识以及常见微服务框架
分布式中的远程调用 在微服务架构中,通常存在多个服务之间的远程调用的需求。远程调用通常包含两个部分:序列化和通信协议。常见的序列化协议包括json、xml、 hession、 protobuf、thrift、text、 bytes等,目前主流的远程调用技术有基于HTTP…...
Unity记录4.1-存储-根据关键字加载Tile
文章首发见博客:https://mwhls.top/4810.html。 无图/格式错误/后续更新请见首发页。 更多更新请到mwhls.top查看 欢迎留言提问或批评建议,私信不回。 汇总:Unity 记录 摘要:实现完 Tilemap 地图生成后,实现根据关键字…...
越南的网站建设/百度推广优化怎么做的
首先请大家看这么一个简单的小程序: #include <stdio.h>void main(){int i, b[10];for ( i 0; i < 10; i ) { b[i] 0; }} 请问这个程序是否有错?A.正常 B.越界 C.死循环 正确答案是C,相信选A或选B的朋友一定会很纳闷…...
上海网站建设服/google官网注册
“可以直接从中专升到本科吗?”不少人会有这种疑问,那这种情况可能吗?其实是不太现实的,大部分的中专生,一般都是因为学习成绩一般,只能一步一个脚印的慢慢提升自己的学历,从中专-大专-本科。之…...
劵妈妈这种网站怎么做/软件开发公司简介
解决方案1: 给scroll-view加上white-space: nowrap; ,给scroll-view的子元素box加上display:inline-block 就像这样: .scroll-box { white-space: nowrap; } .scroll-box .box{ display:inline-block } 解决方案2:flex scroll-view里包个view&#x…...
建设报名系统官方网站/seo网站推广什么意思
IoC,直观地讲,就是容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在。控制权由应用代码中转到了外部容器,控制权的转移是所谓反转。IoC还有另外一个名字——“依赖注入…...
把自己的电脑做网站服务器/怎样推广网站
大家好,这篇文章跟大家来聊下 Spring 中提供的常用扩展点、Spring SPI 机制、以及 SpringBoot 自动装配原理,重点介绍下 Spring 基于这些扩展点怎么跟配置中心(Apollo、Nacos、Zookeeper、Consul)等做集成。 写在前面 我们大多数…...
东莞多语言网站建设/鞍山seo公司
2020/05/16 每日十句英语口语 21.How do I call this number? 21.这个号码怎么打? 22.Do you have a phone book (directory)? 22.你有电话簿吗? 23.I would like to make a long distance call to Taibei. 23.我想打个长途电话到台北去。 24.I want …...