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

类加载过程

基本说明

反射机制是Java实现动态语言的关键,也就是通过反射实现类动态加载。

  1. 静态加载:编译时加载相关的类,如果没有则报错,依赖性太强
  2. 动态加载:运行时加载需要的类,如果运行时不用该类,即使不存在该类,也不会报错,降低了依赖性。

类加载时机

  1. 当创建对象时(new)  //静态加载
  2. 当子类被加载时,父类也加载  //静态加库
  3. 调用类中的静态成员时  //静态加载
  4. 通过反射  //动态加载

类加载过程

加载阶段

JVM在该阶段的主要目的是将字节码从不同的数据源(可能是 class文件、也可能是 jar包,甚至网络)转化为二进制字节流加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个类的java.lang.Class对象。

链接阶段

  1. 验证:(1)、目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求。并且不会会危害虚拟机自身的安全。(2)、包括:文件格式验证(是否以魔数 oxcafebabe开头)、元数据验证、字节码验证和符号引用验证。(3)、可以考虑使用 -Xverify:none 参数来关闭大部分的类验证措施,缩短虚拟机类加载的时间。
  2. 准备:JVM会在该阶段对静态变量,分配内存并默认初始化(对应数据类型的默认初始值,如0、OL、null、false等)。这些变量所使用的内存都将在方法区中进行分配。
  3. 解析:虚拟机常量池内的符号引用(常量名)替换为直接引用(地址)的过程。

初始化阶段

  1. 到初始化阶段,才真正开始执行类中定义的Java程序代码,此阶段是执行<clinit>() 方法的过程。
  2. <clinit>() 方法是由编译器按语句在源文件中出现的顺序,依次自动收集类中的所有静态变量的赋值动作和静态代码块中的语句,并进行合并。
  3. 虚拟机会保证一个类的<clinit>() 方法在多线程环境中被正确地加锁、同步,如果多个线程同时去初始化一个类,那么只会有一个线程去执行这个类的<clinit>() 方法,其他线程都需要阻塞等待,直到活动线程执行<clinit>() 方法完毕

相关文章:

类加载过程

基本说明 反射机制是Java实现动态语言的关键&#xff0c;也就是通过反射实现类动态加载。 静态加载&#xff1a;编译时加载相关的类&#xff0c;如果没有则报错&#xff0c;依赖性太强动态加载&#xff1a;运行时加载需要的类&#xff0c;如果运行时不用该类&#xff0c;即使…...

【C/C++】C++11 无序关联容器的诞生背景

文章目录 背景无序关联容器适用场景有序关联容器适用场景 背景 C11 引入了无序关联容器&#xff08;unordered_map、unordered_set、unordered_multimap 和 unordered_multiset&#xff09;是为了提供一种高效的元素存储和查找方式。相比于有序关联容器&#xff08;map、set、…...

h264编码原理

在介绍编码器原理之前首先了解三个制定编码标准的组织&#xff1a; 1.国际电信联盟(ITU-T)&#xff0c;这是一个音视频领域非常强的组织&#xff0c;规定了很多标准如h261&#xff0c;h262&#xff0c;h263&#xff0c;h263。h263也就是h264的前身。 2.国际标准化组织(ISO)&…...

网络工程师经常搞混的路由策略和策略路由,两者到底有啥区别?

当涉及到网络路由时&#xff0c;两个术语经常被混淆&#xff1a;策略路由和路由策略。虽然这些术语听起来很相似&#xff0c;但它们实际上有着不同的含义和用途。在本文中&#xff0c;我们将详细介绍这两个术语的区别和应用。 一、路由策略 路由策略是指一组规则&#xff0c;用…...

高精度气象模拟软件WRF实践技术

【原文链接】&#xff1a;高精度气象模拟软件WRF(Weather Research Forecasting)实践技术及案例应用https://mp.weixin.qq.com/s?__bizMzU5NTkyMzcxNw&mid2247538149&idx3&sn3890c3b29f34bcb07678a9dd4b9947b2&chksmfe68938fc91f1a99bbced2113b09cad822711e7f…...

总结827

学习目标&#xff1a; 4月&#xff08;复习完高数18讲内容&#xff0c;背诵21篇短文&#xff0c;熟词僻义300词基础词&#xff09; 学习内容&#xff1a; 高等数学&#xff1a;刷1800&#xff0c;做了26道计算题&#xff0c;记录两道错题&#xff0c;搞懂了&#xff0c;但并不…...

还在发愁项目去哪找?软件测试企业级Web自动化测试实战项目

今天给大家分享一个简单易操作的实战项目&#xff08;已开源&#xff09; 项目名称 ET开源商场系统 项目描述 ETshop是一个电子商务B2C电商平台系统&#xff0c;功能强大&#xff0c;安全便捷。适合企业及个人快速构建个性化网上商城。 包含PCIOS客户端Adroid客户端微商城…...

总结下Spring boot异步执行逻辑的几种方式

文章目录 概念实现方式Thread说明 Async注解说明 线程池CompletableFuture&#xff08;Future及FutureTask&#xff09;创建CompletableFuture异步执行 消息队列 概念 异步执行模式&#xff1a;是指语句在异步执行模式下&#xff0c;各语句执行结束的顺序与语句执行开始的顺序…...

【开发日志】2023.04 ZENO----Composite----CompNormalMap

NormalMap-Online (cpetry.github.io)https://cpetry.github.io/NormalMap-Online/ CompNormalMap 将灰度图像转换为法线贴图 将灰度图像转换为法线贴图是一种常见的技术&#xff0c;用于在实时图形渲染中增加表面细节。下面是一个简单的方法来将灰度图像转换为法线贴图&…...

春秋云境:CVE-2022-28525 (文件上传漏洞)

目录 一、题目 1.登录 2.burp抓包改包 3.蚁剑获取flag 一、题目 ED01CMSv20180505存在任意文件上传漏洞 英语不够 翻译来凑&#xff1a; 点击其他页面会Not Found 找不到&#xff1a; 先登录看看吧&#xff1a; 试试万能密码&#xff1a;admin&#xff1a;123 发现错误…...

【软件测试二】开发模型和测试模型,BUG概念篇

目录 1.软件的生命周期 2.瀑布模型 3.螺旋模型 4.增量&#xff0c;迭代 5.敏捷---scrum 1. 敏捷宣言 2.角色 6. 软件测试v模型 7.软件测试w模型 8.软件测试的生命周期 9.如何描述一个BUG 10.如何定义BUG的级别 11.BUG的生命周期 12.产生争执怎么办 1.软件的生命周期…...

短视频app开发:如何实现视频直播功能

短视频源码的实现 在短视频app开发中&#xff0c;实现视频直播功能需要借助短视频源码。短视频源码可以提供一个完整的视频直播功能模块&#xff0c;包括视频采集、编码、推流等。因此&#xff0c;我们可以选择一些开源的短视频源码&#xff0c;例如LFLiveKit、ijkplayer等&am…...

[架构之路-174]-《软考-系统分析师》-5-数据库系统-7-数据仓库技术与数据挖掘技术

5 . 7 数据仓库技术 数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合&#xff0c;用于支持管理决策。近年来&#xff0c;人们对数据仓库技术的关注程度越来越尚&#xff0c;其原因是过去的几十年中&#xff0c;建设了无数的应用系统&#xff0c;积累了…...

销售高品质 FKM EPDM NBR 硅胶 O 形密封圈

O形圈常用于各种行业&#xff0c;包括汽车、航空航天和制造业。它们是由不同材料制成的圆环&#xff0c;用于将两个或多个组件密封在一起。用于制造O形圈的材料是决定其有效性和耐用性的重要因素。在本文中&#xff0c;我们将讨论用于制作O形圈的不同类型的材料。 1.丁腈橡胶(…...

Linux环境变量:不可或缺的系统组成部分

目录标题 引言&#xff08;Introduction&#xff09;Linux环境变量的概念&#xff08;Concept of Linux Environment Variables&#xff09;环境变量的作用与重要性&#xff08;Roles and Importance of Environment Variables&#xff09; Linux环境变量基础&#xff08;Linux…...

FFmpeg命令行解析

目录标题 一、引言&#xff08;Introduction&#xff09;1.1 FFmpeg简介&#xff08;Overview of FFmpeg&#xff09;1.2 FFmpeg命令行的应用场景&#xff08;Application Scenarios of FFmpeg Command Line&#xff09; 二、FFmpeg命令行基础&#xff08;FFmpeg Command Line …...

机器学习——为什么逻辑斯特回归(logistic regression)是线性模型

问&#xff1a;逻辑斯蒂回归是一种典型的线性回归模型。 答&#xff1a;正确。逻辑斯蒂回归是一种典型的线性回归模型。它通过将线性回归模型的输出结果映射到[0,1]区间内&#xff0c;表示某个事物发生的概率&#xff0c;从而适用于二分类问题。具体地说&#xff0c;它使用sig…...

从输入URL到页面展示到底发生了什么

刚开始写这篇文章还是挺纠结的&#xff0c;因为网上搜索“从输入url到页面展示到底发生了什么”&#xff0c;你可以搜到一大堆的资料。而且面试这道题基本是必考题&#xff0c;二月份面试的时候&#xff0c;虽然知道这个过程发生了什么&#xff0c;不过当面试官一步步追问下去的…...

Qt connect传参方式及lambda函数传参方式详解

Qt connect传参方式及lambda函数传参方式详解 Qt是一种流行的跨平台C应用程序框架&#xff0c;它提供了许多有用的工具和函数来帮助开发人员构建高效的图形用户界面和其他应用程序。其中&#xff0c;Qt Connect函数是用于连接信号和槽的重要函数之一&#xff0c;它可以在Qt应用…...

如何在硬盘上恢复已经删除的照片?

可以从硬盘恢复删除的照片吗&#xff1f; 旅行后&#xff0c;许多人倾向于将照片保存到另一个储存设备作为副本或备份。例如&#xff0c;将它们存储在外部硬盘上或将图片传输到电脑。但是在整理照片的时候&#xff0c;很可能不小心把照片删掉了&#xff0c;尤其是使用外接硬…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...