【JVM】JVM类加载机制
JVM类加载机制
- 加载
- 双亲委派模型
- 验证
- 准备
- 解析
- 初始化
JVM的类加载机制,就是把类,从硬盘加载到内存中
Java程序,最开始是一个Java文件,编译成.class文件,运行Java程序,JVM就会读取.class文件,把文件的内容,放到内存中,并且构造成.class类对象
加载
这里的加载是整个类加载的一个阶段,他和类加载是不同的
在整个类加载的过程中 主要任务就是找到.class文件 打开文件 读取文件内容 ,并且尝试解析格式
双亲委派模型
双亲委派模型 描述类加载的过程中 如何找到.class文件
JVM加载.class文件的时候,需要用到"类加载器"模块,JVM中自带了三个类加载器 Bootstrap ClassLoader,Extension ClassLoader,Application ClassLoader
此处的三个类加载器有"父子关系",在一个对象内有一个parent引用指父类加载器实例
验证
检查当前.class文件的格式 是否符合要求
.class文件虽然是二进制文件 但是内部也是有一定结构的
-
魔数(magic number) .class文件的开头四个字节是一个固定的魔数,用于标识该文件是否为有效的.class文件
-
版本信息 两个字节的版本号 表示编译器的主版本和次版本号,用于确定使用的Java编译器的版本
-
常量池(constant pool) 常量池是 .class 文件中最重要的部分之一,它存储了类、接口、字段、方法等元素的符号引用和常量值。常量池是一个表结构,以 1 开始计数,包含了若干个常量池项。
-
访问标志 访问标志用于描述类或接口的访问权限和特性,如是否为 public、final、abstract 等。
-
类索引 类索引指向常量池中类或接口的描述符;父类索引指向常量池中父类的描述符;接口索引表列出了实现的接口的描述符。
-
字段表和方法表 字段表包含了类或接口中定义的所有字段的信息,如名称、类型、修饰符等;方法表包含了类或接口中定义的所有方法的信息,如名称、参数类型、返回类型、修饰符等。
-
属性表 属性表包含了类、字段和方法的附加信息,如编译器生成的代码、注解等。属性表是可选的,可以包含零个或多个属性。
总的来说 一个Java文件里的所有信息 在.class文件中都会有所体现
准备
准备阶段是正式为类中定义的变量,即静态变量 分配内存并设置变量初始值
解析
Java虚拟机将常量池内的符号引用替换为直接引用的过程,也就是初始化常量的过程
.class文件中 不知道字符串真实的内存地址是在哪里,只知道一个相对的偏移量 也就是知道字符串的内容在.class文件的哪个地方 等到字符串内容加载到内存之后,就可以把真实 的地址,替换到刚才的符号引用这里了
初始化
初始化阶段,Java虚拟机真正开始执行类中编写的Java程序代码 将主导权移交给应用程序,初始化阶段就是执行类构造器方法的过程
相关文章:
【JVM】JVM类加载机制
JVM类加载机制 加载双亲委派模型 验证准备解析初始化 JVM的类加载机制,就是把类,从硬盘加载到内存中 Java程序,最开始是一个Java文件,编译成.class文件,运行Java程序,JVM就会读取.class文件,把文件的内容,放到内存中,并且构造成.class类对象 加载 这里的加载是整个类加载的一…...
【面试经典150 | 区间】汇总区间
文章目录 Tag题目来源题目解读解题思路方法一:一次遍历复杂度分析 其他语言python3C 写在最后 Tag 【一次遍历】【数组】【字符串】 题目来源 228. 汇总区间 题目解读 给定一个无重复的升序数组 nums,需要将这个数组按照以下规则进行汇总࿱…...
主流接口测试框架对比
公司计划系统的开展接口自动化测试,需要我这边调研一下主流的接口测试框架给后端测试(主要测试接口)的同事介绍一下每个框架的特定和使用方式。后端同事根据他们接口的特点提出一下需求,看哪个框架更适合我们。 需求 1、接口编写…...
LeetCode 150.逆波兰表达式求值
题目链接 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题目解析 首先我们需要知道什么是逆波兰表达式,像我们平常遇到的都是中缀表达式,然而逆波兰确实后缀表达式,因此这个题目隐含的意思就是将一个后缀表达式转…...
华为---企业WLAN组网基本配置示例---AC+AP组网
ACAP组网所需的物理条件 1、无线AP---收发无线信号; 2、无线控制器(AC)---用来控制管理多个AP; 3、PoE交换机---能给AP实现网络连接和供电的交换机; 4、授权:默认AC管理的AP数量有限,买授权才能管控更多AP。 WLAN创建…...
循环结构的运用
乘法口诀起源于中国,是古代人进行乘法、除法、开方等运算的基本法则,距今已经有两千多年的历史了,如何运用现代计算机技术快速写出九九乘法表呢? 循环结构可以用来重复执行一条或者多条语句,利用循环结构可以减少源程序…...
深度强化学习第 1 章 机器学习基础
1.1线性模型 线性模型(linear models)是一类最简单的有监督机器学习模型,常被用于简单的机 器学习任务。可以将线性模型视为单层的神经网络。本节讨论线性回归、逻辑斯蒂回归(logistic regression)、 softmax 分类器等…...
第一章 STM32 CubeMX (CAN通信发送)基础篇
第一章 STM32 CubeMX (CAN通信)基础篇 文章目录 第一章 STM32 CubeMX (CAN通信)基础篇STM32中文手册简介简介stm32f1系列CAN的特点CAN连接网络示意图硬件电路CAN波特率计数 一、 STM32 CubeMX设置设置波特率工程目录结构添加CAN驱…...
原子性操作
原子性操作是指一个操作在执行过程中不会被中断,要么全部执行成功,要么全部不执行,不会出现部分执行的情况。原子性操作对于多线程并发编程至关重要,因为它可以确保多个线程之间不会出现竞态条件或数据不一致性。 在计算机科学中…...
论文阅读:Segment Any Point Cloud Sequences by Distilling Vision Foundation Models
目录 概要 Motivation 整体架构流程 技术细节 小结 论文地址:[2306.09347] Segment Any Point Cloud Sequences by Distilling Vision Foundation Models (arxiv.org) 代码地址:GitHub - youquanl/Segment-Any-Point-Cloud: [NeurIPS23 Spotlight]…...
Netty 入门 — 亘古不变的Hello World
这篇文章我们正式开始学习 Netty,在入门之前我们还是需要了解什么是 Netty。 什么是 Netty 为什么很多人都推崇 Java boy 去研究 Netty?Netty 这么高大上,它到底是何方神圣? 用官方的话说:Netty 是一款异步的、基于事…...
idea插件开发javax.net.ssl.SSLException: No PSK available. Unable to resume.
idea插件开发,编译出错 javax.net.ssl.SSLException: No PSK available. Unable to resume.at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:129)at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)at java.base/sun.security.ssl.…...
Selenium的WebDriver操作页面的超时或者元素重叠引起的ElementClickInterceptedException
超时 处理由页面加载引起的超时是在使用 Selenium 进行自动化测试中常见的任务。页面加载可能因网络速度慢、页面复杂性或异步操作而导致超时。以下是一些处理页面加载超时的方法: 1.设置隐式等待时间: 使用 implicitly_wait 方法可以设置隐式等待时间…...
oracle数据库的缓存设置
Oracle缓存由两个参数控制SGA_TARGET和PGA_AGGREGATE_TARGET,设置了这两个参数,其他的基本内存部分都由Oracle自动配置为最优值,这也是Oracle推荐的方式。 SGA_TARGET 和PGA_AGGREGATE_TARGET是动态参数,可以在不重启数据库的情况…...
算法通关村第一关-链表青铜挑战笔记
欢迎来到 : 第一关青铜关 java如何创建链表链表怎么增删改查 我们先了解链表 单链表的概念 我们从简单的创建和增删改查开始. 链表的概念 线性表分为顺序表(数组组成)和链表(节点组成) . 链表又分: 单向 双向有哨兵节点 无哨兵节点循环 不循环 链表是一种物理存储单…...
✔ ★【备战实习(面经+项目+算法)】 10.15学习时间表
✔ ★【备战实习(面经项目算法)】 坚持完成每天必做如何找到好工作1. 科学的学习方法(专注!效率!记忆!心流!)2. 每天认真完成必做项,踏实学习技术 认真完成每天必做&…...
pytorch 训练时raise EOFError EOFError
训练到一半时获取验证数据报错 报错代码 imgs next(iter(val_dataloader)) val_dataloader DataLoader(ImageDataset("data/%s" % opt.dataset_name, transforms_transforms_, unalignedTrue, mode"test"),batch_size5,shuffleTrue,num_workers2,)def …...
node.js+NPM包管理器+Webpack打包工具+前端项目搭建
javascript运行环境(无需依赖html文件) BFF,服务于前端的后端 官网下载安装,node -v查看是否安装成功 ①、创建一个01.js文件 //引入http模块 const httprequire(http)//创建服务器 http.createServer(function(request,respo…...
PCL点云处理之基于FPFH特征的全局配准流程具体实现(二百二十一)
PCL点云处理之基于FPFH特征的全局配准流程具体实现(二百二十一) 一、算法介绍二、算法实现1.代码2.效果一、算法介绍 PCL点云库提供的多种工具,可以组合为一套完整的点云配准流程,这里选择FPFH特征,进行具体的配准流程实现,主要内容包括点云读取、点云法线计算、点云特征…...
ai_drive67_基于不确定性的多视图决策融合
论文链接:https://openreview.net/forum?idOOsR8BzCnl5 https://arxiv.org/abs/2102.02051 代码链接:https://github.com/hanmenghan/TMC Zongbo Han, Changqing Zhang, Huazhu Fu, Joey Tianyi Zhou, Trusted Multi-View Classification, Internatio…...
Docker逃逸---procfs文件挂载
一、产生原因 将宿主机/proc目录挂载进了容器,而该目录内的/proc/sys/kernel/core_pattern文件是负责进程奔溃时内存数据转储的,当第一个字符是| 管道符时,后面的部分会以命令行的方式进行解析并运行,攻击者可以将恶意文件写入该…...
[Python小项目] 从桌面壁纸到AI绘画
从桌面壁纸到AI绘画 一、前言 1.1 确认问题 由于生活和工作需要,小编要长时间的使用电脑,小编又懒,一个主题用半年的那种,所以桌面壁纸也是处于常年不更换的状态。即时改变主题也是在微软自带的壁纸中选择,而这些自…...
【Docker 内核详解】namespace 资源隔离(五):User namespaces
【Docker 内核详解 - namespace 资源隔离】系列包含: namespace 资源隔离(一):进行 namespace API 操作的 4 种方式namespace 资源隔离(二):UTS namespace & IPC namespacenamespace 资源隔…...
网络原理必知会
衔接上文:网络原理必知会_念君思宁的博客-CSDN博客 流量控制: 流量控制也是保证可靠性的机制 对于滑动窗口,批量发送数据而言,窗口越大,相当于批量发送的数据越多,整体的速度也就越快了,但是&…...
ELK 日志分析系统介绍与部署
目录 一、ELK 简介: 1.开源工具介绍: 2.其它组件: 2.1 Filebeat: 2.2 Fluentd: 2.3 缓存/消息队列(redis、kafka、RabbitMQ等): 3. filebeat 结合 logstash 带来好处: 二、为什么要…...
Android 内存治理之线程
1、 前言 当我们在应用程序中启动一个线程的时候,也是有可能发生OOM错误的。当我们看到以下log的时候,就说明系统分配线程栈失败了。 java.lang.OutOfMemoryError: pthread_create (1040KB stack) failed: Out of memory这种情况可能是两种原因导致的。…...
三、K8S之ReplicaSet
ReplicaSet 一、概述 Kubernetes最核心的功能是编排,编排操作都是依靠控制器对象来完成,高级控制器控制着基础的控制器,基础控制器再去控制Pod,Pod里面再包容器。K8S项目里API对象层级大概就是这样。 而ReplicaSet这个控制器是…...
【基础篇】四、本地部署Flink
文章目录 1、本地独立部署会话模式的Flink2、本地独立部署会话模式的Flink集群3、向Flink集群提交作业4、Standalone方式部署单作业模式5、Standalone方式部署应用模式的Flink Flink的常见三种部署方式: 独立部署(Standalone部署)基于K8S部署…...
简述什么是迭代器(Iterator)?
迭代器(Iterator)是一种设计模式,Java 中的迭代器是集合框架中的一个接口,它可以让程序员遍历集合中的元素而无需暴露集合的内部结构。使用迭代器可以遍历任何类型的集合,例如 List、Set 和 Map 等。 通过调用集合类的 iterator() 方法可以获取一个迭代器,并使用 hasNext…...
DarkGate恶意软件通过消息服务传播
导语 近日,一种名为DarkGate的恶意软件通过消息服务平台如Skype和Microsoft Teams进行传播。它冒充PDF文件,利用用户的好奇心诱使其打开,进而下载并执行恶意代码。这种攻击手段使用了Visual Basic for Applications(VBA࿰…...
东莞服务36招全称/佛山做网络优化的公司
问题最近直接在Server上编辑文件的时候才发现,原来我们的Ubuntu Server竟然没有自带中文,输进去的中文都成了乱码,煞是难看。研究了一会配置中文显示的方法,稍微花了点时间,这里姑且记一下方便以后查找。解决思路要解决…...
网上做兼职网站正规/南宁网络推广培训机构
第一种,加号(“”): print python # output python str py print strthon # output python 第二种 ,空格: 只要把两个字符串(仅限字符串)放在一起,中间有空白或者没有空格,两个字符…...
成都网站建设成都网络公司/seo策略主要包括
代码 <el-table ref"table"> ... </eltable>...scrollBottom() { /** 如果有数据加载再到顶部就用nexttick */ this.$nextTick(() > {this.$refs.table.bodyWrapper.scrollTop this.$refs.table.bodyWrapper.scrollHeight; }) }...
wordpress中文更改/网站外链是什么意思
函数的返回值: 举例1: def showplus(x): print(x) return x 1 showplus(5) 输出结果为: 5 6 举例2: def showplus(x): print(x) return x 1 print(x1) #会执行吗? showplus(5) 输出结果为: 5 6 2、多条re…...
中小企业网站建设公司/百度做个人简介多少钱
作者 | 银川回民二小点文末“在看”,推荐给朋友导语:当大规模的在线教育铺开,区域教育的决策者急需对当下的实施情况进行把脉,以便做出更加科学的应对措施。一份成熟问卷设计,在此时显得尤为关键,为此&…...
阿里虚拟主机怎么做两个网站/网络销售管理条例
Listview主要有两个职责: 将数据填充到布局 处理用户的选择点击等操作列表的显示需要三个元素: ListVeiw 用来展示列表的View适配器(Adapter) 用来把数据映射到ListView上的中介数据(data) 具体的将被映射的字符串,图片,或者基本组件首先要了解什么…...