当前位置: 首页 > news >正文

【Android面试八股文】你能描述一下JVM中的类加载过程吗?

文章目录

  • 一、Java类的生命周期
  • 二、JVM类加载过程
    • 1. 加载(Loading)
    • 2. 链接(Linking)
      • a. 验证(Verification)
      • b. 准备(Preparation)
        • b.1 准备阶段的初始值
        • b.2 用户定义的初值
        • b.3 常量的初始化
      • c. 解析(Resolution)
    • 3. 初始化(Initialization)
      • 3.1 什么是 `<clinit>` 方法?
          • 3.1.1 特点:
          • 3.1.2 `<clinit>` 方法的作用
      • 3.2 什么情况下会触发类的初始化?
      • 3.3 不会触发初始化的情况
      • 3.4 初始化的线程安全性
  • 三、类加载的时机
  • 四、类加载器(ClassLoader)
    • 4.1 启动类加载器(Bootstrap ClassLoader)
    • 4.2 扩展类加载器(Extension ClassLoader)
    • 4.3 应用类加载器(Application ClassLoader)
    • 4.4 自定义类加载器
  • 五、类加载过程的特点
  • 六、讲一讲双亲委派机制(Parent Delegation Model)
    • 6.1 层次结构
    • 6.2工作原理
    • 6.3 优势和作用
    • 6.4 为什么要设置双亲委派机制?
    • 6.5 应用场景
  • 总结

一、Java类的生命周期

在Java语言中,每个类或接口都会被编译器编译程一个个class字节码文件。

类加载则是将这些class字节码文件的二进制数据读入到内存中,并且对数据进行校验、解析、初始化。最终,每一个类都会在方法区保存一份它的元数据,在堆中创建一个与之对应的Class对象。
在这里插入图片描述
类的生命周期需要经历7个阶段,分别是加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和 卸载(Unloading),其中 验证(Verification)、准备(Preparation)、解析(Resolution) 可以归纳为 “链接” 阶段

其中,使用和卸载的描述如下,其他几个阶段在下一小节讲解。

  • 使用 :程序代码执行时使用,new出对象程序中使用。
  • 卸载 :程序代码退出、异常、结束等,执行垃圾回收。

二、JVM类加载过程

类的加载过程则是前面5

相关文章:

【Android面试八股文】你能描述一下JVM中的类加载过程吗?

文章目录 一、Java类的生命周期二、JVM类加载过程1. 加载(Loading)2. 链接(Linking)a. 验证(Verification)b. 准备(Preparation)b.1 准备阶段的初始值b.2 用户定义的初值b.3 常量的初始化c. 解析(Resolution)3. 初始化(Initialization)3.1 什么是 `<clinit>`…...

MYSQL八、MYSQL的SQL优化

一、SQL优化 sql优化是指&#xff1a;通过对sql语句和数据库结构的调整&#xff0c;来提高数据库查询、插入、更新和删除等操作的性能和效率。 1、插入数据优化 要一次性往数据库表中插入多条记录&#xff1a; insert into tb_test values(1,tom); insert into tb_tes…...

鸿蒙轻内核M核源码分析系列二一 02 文件系统LittleFS

1、LFS文件系统结构体介绍 会分2部分来介绍结构体部分&#xff0c;先介绍LittleFS文件系统的结构体&#xff0c;然后介绍LiteOS-M内核中提供的和LittleFS相关的一些结构体。 1.1 LittleFS的枚举结构体 在openharmony/third_party/littlefs/lfs.h头文件中定义LittleFS的枚举、…...

【ARMv8/ARMv9 硬件加速系列 3 -- SVE 指令语法及编译参数详细介绍】

文章目录 SVE 汇编语法SVE 单通道谓词SVE 测试代码 SVE 软件和库支持SVE 编译参数配置-marcharmv8-alseprofilememtagsve2-aessve2-bitpermcryptosve2sve2-sha3sve2-sm4 SVE 汇编语法 在介绍 SVE 汇编指令语法之前&#xff0c;先介绍下如何判断自己所使用的芯片是否实现了SVE功…...

Java版+ SaaS应用+接口技术RESTful API 技术开发的智慧医院HIS系统源码 专注医院管理系统研发 支持二开

Java版 SaaS应用接口技术RESTful API WebSocket WebService技术开发的智慧医院HIS系统源码 专注医院管理系统研发 支持二开 医院住院管理系统&#xff08;Hospital Information System简称HIS&#xff09;是一门医学、信息、管理、计算机等多种学科为一体的边缘科学&#xff…...

工业机器人远程运维,增强智慧工厂运营管理

1、需求背景 随着工业自动化技术的普及和工业机器人应用的增加&#xff0c;制造业对于生产线稳定性和效率的要求不断提高。然而&#xff0c;传统的现场监控方式存在着地理位置限制、实时监控难度大以及诊断能力有限等问题&#xff0c;迫切需要一种更具灵活性和效率的监控方式。…...

理解Python的元类

1.type()函数 type 函数是一个内置函数&#xff0c;用来获取一个对象的类型。它可以接受一个参数&#xff0c;返回这个参数的数据类型。type也可以用来创建类&#xff0c;type就是元类 x333 list["ab"] tuple (1, "a", True, 3.14) dict {name: Alice,…...

web前端黑马下载:探索学习资源的海洋

web前端黑马下载&#xff1a;探索学习资源的海洋 在数字化时代&#xff0c;Web前端技术日益成为互联网行业的核心驱动力。为了跟上这一趋势&#xff0c;众多学习者纷纷投身于Web前端的学习之中。而在这个过程中&#xff0c;“黑马”作为一个备受瞩目的品牌&#xff0c;其Web前…...

最新版jd-gui下载

对于java开发的工程师来说&#xff0c;jd-gui应该是经常会用到的工具了 官网的jd-gui目前只支持到JAVA13&#xff0c;更新版本JAVA编译出来的JAR包就反编译不出来了 此版本支持到了JAVA23 如果需要win以外的其他版本&#xff0c;可以查看我的其他上传 如果不想花积分&#…...

(051)FPGA时钟--->(001)时钟介绍

(001)时钟介绍 1 目录 (a)FPGA简介 (b)Verilog简介 (c)时钟简介 (d)时钟介绍 (e)结束 1 FPGA简介 (a)FPGA(Field Programmable Gate Array)是在PAL (可编程阵列逻辑)、GAL(通用阵列逻辑)等可编程器件的基础上进一步发展的产物。它是作为专用集成电…...

Java程序员英语单词通关:

Java程序员英语单词通关&#xff1a; abstract - 抽象的 boolean - 布尔值 break - 打断 byte - 字节 case - 情况&#xff0c;实例 catch - 捕获 char - 字符 class - 类 continue - 继续 default - 默认&#xff0c;通常 do - 做&#xff0c;运行 double - 双精度…...

数据库开发-Mysql03

目录 1. 多表查询 1.1 概述 1.1.1 数据准备 1.1.2 介绍 1.1.3 分类 1.2 内连接 1.3 外连接 1.4 子查询 1.4.1 介绍 1.4.2 标量子查询 1.4.3 列子查询 1.4.4 行子查询 1.4.5 表子查询 1.5 案例 2. 事务 2.1 介绍 2.2 操作 2.3 四大特性 3. 索引 3.1 介绍 3…...

0-1 背包问题(动态规划 查询背包元素)

描述 给定n种物品和一个背包&#xff0c;物品i的重量是Wi​&#xff0c;其价值为Vi​&#xff0c;问如何选择装入背包的物品&#xff0c;使得装入背包的物品的总价值最大&#xff1f; 在选择装入背包的物品时&#xff0c;对每种物品i只能有两种选择&#xff0c;装入或者不装入…...

elasticsearch快照生成与恢复

Elasticsearch快照生成与恢复的场景主要涉及到数据的备份与恢复需求。当需要对Elasticsearch集群中的数据进行备份&#xff0c;或者在数据丢失、损坏等情况下需要恢复数据时&#xff0c;就可以使用快照功能。 快照生成的方法通常包括以下步骤&#xff1a; 1、创建一个快照仓库…...

178.二叉树:最大二叉树(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…...

跨境电商中的IP隔离是什么?怎么做?

一、IP地址隔离的概念和原理 当我们谈论 IP 地址隔离时&#xff0c;我们实际上是在讨论一种网络安全策略&#xff0c;旨在通过技术手段将网络划分为不同的区域或子网&#xff0c;每个区域或子网都有自己独特的 IP 地址范围。这种划分使网络管理员可以更精细地控制哪些设备或用…...

【C++】stack、queue和deque的使用

&#x1f497;个人主页&#x1f497; ⭐个人专栏——C学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读 一、stack 1. stack介绍 2. stack使用 二、queue 1. queue介绍 2. queue使用 三、deque 1. deque介绍 2. deque的…...

通过SSH远程登录华为设备

01 进入系统编辑视图 system-view Enter system view, return user view with return command. 02 创建本地RSA密钥对 [HUAWEI]rsa local-key-pair creat The key name will be:HUAWEI_Host The range of public key size is (2048 ~ 2048). NOTE: Key pair generation will ta…...

算法day27

第一题 515. 在每个树行中找最大值 首先是遍历每层的节点&#xff0c;将每一层最大值的节点的值保留下来&#xff0c;最后将所有层的最大值的表返回&#xff1b;具体的遍历每层节点的过程如上一篇故事&#xff1b; 综上所述&#xff0c;代码如下&#xff1a; /*** Definition …...

记录一次CTF图片拼图安装工具montage+gaps成功步骤以及踩坑全过程

安装图片拼接工具montage&#xff1a; 1.安装 使用pip install montage无法安装montage工具的师傅可以尝试下面的方法 #Debian apt-get install graphicsmagick-imagemagick-compat#Ubuntu apt-get install graphicsmagick-imagemagick-compat#Alpine apk add imagemagick6#…...

深入剖析人才管理的关键要素:“选、用、育、留”四大核心要素

在当今这个日新月异的商业时代&#xff0c;企业的成功不再仅仅取决于资金、技术或市场策略&#xff0c;而更多地依赖于企业所拥有的人才资源。有效的人才管理策略&#xff0c;尤其是“选、用、育、留”四大核心要素&#xff0c;已成为推动企业持续发展的关键。 一、选&#xff…...

【C++】类的默认成员函数

类的默认成员函数 类的六个默认成员函数构造函数构造函数的概念构造函数的特性 析构函数析构函数的概念析构函数的特性 构造函数与析构函数的调用顺序拷贝构造拷贝构造的概念拷贝构造的特性赋值运算符重载运算符重载赋值运算符重载前置与后置重载输入输出流重载 const修饰成员实…...

归并排序!

归并排序 https://articles.zsxq.com/id_g23e5o3lg87e.html 目录 归并排序算法思想命名由来算法描述sortList函数mergeSort函数 源代码 算法思想 通过将当前乱序的数组分成两个部分&#xff0c;分别进行「递归调用」&#xff0c;利用两个指针将数据元素以此比较&#xff0c;选…...

深入探讨:Spring与MyBatis中的连接池与缓存机制

深入探讨&#xff1a;Spring与MyBatis中的连接池与缓存机制 引言 在现代应用程序开发中&#xff0c;性能优化是一个永恒的话题。而在企业级Java应用开发中&#xff0c;Spring和MyBatis是两种非常流行的框架&#xff0c;它们的连接池和缓存机制对应用程序的性能有着至关重要的…...

[C#]使用C#部署yolov10的目标检测tensorrt模型

【测试通过环境】 win10 x64vs2019 cuda11.7cudnn8.8.0 TensorRT-8.6.1.6 opencvsharp4.9.0 .NET Framework4.7.2 NVIDIA GeForce RTX 2070 Super cuda和tensorrt版本和上述环境版本不一样的需要重新编译TensorRtExtern.dll&#xff0c;TensorRtExtern源码地址&#xff1a;T…...

Linux CFS 调度器 (1):概述

文章目录 1. 前言2. CFS 调度器2.1 概述2.2 一些实现细节2.3 运行队列&#xff1a;红黑树2.4 一些特征2.5 调度策略2.6 调度器类别2.7 扩展&#xff1a;组调度 3. 参考资料 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff…...

HBase中Master初始化错误~

ERROR&#xff1a;org.apache.hadoop.hbase.PleaseHoldException:Master is initializing 1、停止HBase运行 2、启动zookeeper中的zkCli.sh服务 ./zookeeper/bin/zkCli.sh 3、执行完毕显示以下结果,删除habse文件夹 4、重新启动HBase即可。...

Hive on Spark版本兼容性

Hive on Spark仅在特定版本的Spark上进行测试&#xff0c;因此给定版本的Hive只能保证与特定版本的Spark一起工作。其他版本的Spark可能与给定版本的Hive一起工作&#xff0c;但不能保证。以下是Hive版本及其对应的Spark版本列表&#xff1a; 详情参考官方文档&#xff1a;http…...

grep命令知多少

引言 1. grep命令的重要性 在Linux系统中&#xff0c;grep是一个不可或缺的文本处理工具&#xff0c;它允许用户快速搜索文件中的文本模式。这个命令的名称来源于Global Regular Expression Print&#xff0c;即全局正则表达式打印&#xff0c;它源自UNIX早期的ed文本编辑器。…...

[java]windows和linux下jdk1.8安装包所有版本系列下载地址汇总

【windows jdk1.9系列下载地址】 序号java版本下载地址1java-jdk9-jdk-9.0.1-windows-x64-bin.zip点我下载 【windows jdk1.8系列下载地址】 序号java版本下载地址1java-jdk1.8-jdk-8u202-windows-x64.zip点我下载2java-jdk1.8-jdk-8u201-windows-x64.zip点我下载3java-jdk1…...